Json 如何专门进行反序列化';空';和杰克逊?

Json 如何专门进行反序列化';空';和杰克逊?,json,jackson,Json,Jackson,我有一个类可以输出以下任何内容: {标题:“我的主张”} {标题:“我的主张”,判决:无效} {标题:“我的要求”,判决:“站立”} (注意每种情况下的判断是如何不同的:它可以是未定义的、空的或值) 该类看起来像: class Claim { String title; Nullable<String> judgment; } 类别索赔{ 字符串标题; 可撤销的判决; } 可为空的是: class Nullable<T> { public T v

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

  • {标题:“我的主张”}
  • {标题:“我的主张”,判决:无效}
  • {标题:“我的要求”,判决:“站立”}
(注意每种情况下的判断是如何不同的:它可以是未定义的、空的或值)

该类看起来像:

class Claim {
   String title;
   Nullable<String> judgment;
}
类别索赔{
字符串标题;
可撤销的判决;
}
可为空的是:

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);
SimpleModule=new SimpleModule(“NullableSerMod”,Version.unknownVersion());
addSerializer(Nullable.class,新的JsonSerializer()){
@凌驾
public void serialize(可为null的arg0、JsonGenerator arg1、SerializerProvider arg2)引发IOException、JsonProcessingException{
如果(arg0==null)
返回;
arg1.writeObject(arg0.value);
}
});
outputMapper.registerModule(模块);
摘要:此设置允许我输出值、空值或未定义值

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

我想会是这样的:

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));
   }
});
SimpleModule=new SimpleModule(“NullableDeserMod”,Version.unknownVersion());
addDeserializer(Nullable.class,新的JsonDeserializer反序列化(JsonParser解析器,反序列化上下文)抛出IOException,JsonProcessingException{
if(下一项为null)
返回新的可空(null);
其他的
返回新的Nullable(parser.readValueAs(内部类型));
}
});
但我不知道“下一个东西是空的”或“内部类型”应该放什么

有什么办法可以做到这一点吗

谢谢

在反序列化程序中覆盖getNullValue()方法


参见



返回其中的“”

谢谢!我花了一整天在这上面。只需重写getNullValue就行了。