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就行了。