7

我有一个可以输出以下任何内容的类:

  • {标题:“我的主张”}
  • {标题:“我的主张”,判断:空}
  • {标题:“我的主张”,判断:“站立”}

(注意每种情况下的判断是如何不同的:它可以是未定义的、null 或一个值)

该类看起来像:

class Claim {
   String title;
   Nullable<String> judgment;
}

Nullable 是这样的:

class Nullable<T> {
   public T value;
}

使用自定义序列化程序:

SimpleModule module = new SimpleModule("NullableSerMod", Version.unknownVersion());
module.addSerializer(Nullable.class, new JsonSerializer<Nullable>() {
   @Override
   public void serialize(Nullable arg0, JsonGenerator arg1, SerializerProvider arg2) throws IOException, JsonProcessingException {
      if (arg0 == null)
         return;
      arg1.writeObject(arg0.value);
   }
});
outputMapper.registerModule(module);

摘要:此设置允许我输出值、null或 undefined

现在,我的问题是:如何编写相应的反序列化器?

我想它看起来像这样:

SimpleModule module = new SimpleModule("NullableDeserMod", Version.unknownVersion());
module.addDeserializer(Nullable.class, new JsonDeserializer<Nullable<?>>() {
   @Override
   public Nullable<?> deserialize(JsonParser parser, DeserializationContext context) throws IOException, JsonProcessingException {
      if (next thing is null)
         return new Nullable(null);
      else
         return new Nullable(parser.readValueAs(inner type));
   }
});

但我不知道“下一件事情是空的”或“内部类型”该放什么。

关于如何做到这一点的任何想法?

谢谢!

4

1 回答 1

9

覆盖反序列化器中的 getNullValue() 方法


请参阅如何将 JSON null 反序列化为 NullNode 而不是 Java null?


在其中返回“”

于 2013-05-15T08:27:23.073 回答