如何解决将json字符串反序列化为具有杰克逊字符串属性的对象
我有一个json字符串,看起来像:
{"a":5,"b":"asd","c":"{\"d\":3}"}
可以反序列化为这样的对象:
class A {
int a; // --> 5
String b; // --> 'asd'
String c; // --> '{"d":3}'
}
但我希望将其反序列化为:
class A {
int a; // --> 5
String b; // --> 'asd'
MyClass c; // --> '{"d":3}'
}
MyClass在哪里:
class MyClass {
int d; // --> 3
}
在反序列化期间如何在杰克逊中实现?
解决方法
尝试两次反序列化:
A aObject = mapper.readValue(json,A.class);
aObject.setCObject(mapper.readValue(aObject.getC(),C.class));
class A {
int a;
String b;
String c;
C cObject;
}
class C {
int d;
}
,
我刚刚发现可以使用杰克逊转换器:
public class MyClassConverter implements Converter<String,MyClass> {
@Override
public MyClass convert(String value) {
try {
return new ObjectMapper().readValue(value,MyClass.class);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
@Override
public JavaType getInputType(TypeFactory typeFactory) {
return typeFactory.constructSimpleType(String.class,null);
}
@Override
public JavaType getOutputType(TypeFactory typeFactory) {
return typeFactory.constructSimpleType(MyClass.class,null);
}
}
在Bean中:
class A {
int a;
String b;
@JsonDeserialize(converter = MyClassConverter.class)
MyClass c;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。