我希望 Jackson 序列化为 JSON 对象的所有 POJO 的类名作为相应对象的属性包含在内。理想情况下,这应该通过 ObjectMapper 或类似的一些常规设置来实现。
序列化示例:
public class MyClass {
private String someField;
private MyOtherClass anotherField;
}
到
{
"$type": "MyClass",
"someField": "abc",
"anotherField": {
"$type": "MyOtherClass",
...
}
}
我知道这也可以通过用类似的东西注释所有相应的类来完成
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "$type")
但我想避免这种情况。
我也尝试过
objectMapper.enableDefaultTypingAsProperty(ObjectMapper.DefaultTyping.JAVA_LANG_OBJECT, "$type")
这似乎不起作用。
有这样通用的设置吗?
我实际上通过自定义和构建一个TypeResolverBuilderwith得到了我正在寻找的东西DefaultTyping.NON_FINAL。
StdTypeResolverBuilder typer = new ObjectMapper.DefaultTypeResolverBuilder(ObjectMapper.DefaultTyping.NON_FINAL) {
@Override
public boolean useForType(JavaType t) {
return !(t.isCollectionLikeType() || t.isMapLikeType()) && super.useForType(t);
}
}
.init(JsonTypeInfo.Id.NAME, null)
.inclusion(JsonTypeInfo.As.PROPERTY)
.typeProperty("$type");
objectMapper.setDefaultTyping(typer);
侃侃无极
相关分类