我希望 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);
1 回答

侃侃无极
TA贡献2051条经验 获得超10个赞
您应该使用ObjectMapper.DefaultTyping.NON_FINAL
而不是ObjectMapper.DefaultTyping.JAVA_LANG_OBJECT
,因为后一个仅在类的字段类型处于编译时时才Object
包含类型属性。
添加回答
举报
0/150
提交
取消