我有一些类使用 @JsonTypeIdResolver
将自定义类型字段添加到输出。此代码按预期工作。我现在已将 PropertyFilter
添加到我的映射器对象。这是 @JsonTypeIdResolver
停止工作的地方。工厂不再被调用。
工作代码:
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(outputStream,myObject);
无效代码:
ObjectMapper mapper = new ObjectMapper();
PropertyFilter myfilter=new SimpleBeanFilter() {
protected boolean include(BeanPropertyWriter writer) {
return true;
}
protected boolean include(PropertyWriter writer) {
return true;
}
}
FilterProvider filters=new SimpleFilterProvider().addFilter("myFilter",myFilter);
mapper.writer(filter).writeValue(outputStream,myObject);
由于过滤器毫无用处(接受任何东西),输出应该是相同的。为什么我的类型字段不再被序列化?
最佳答案
Jackson 似乎没有以正确的方式处理继承。我的测试设置就像
@JsonTypeInfo( use = JsonTypeInfo.Id.CLASS, include = As.PROPERTY, property = "_type" )
abstract class Base {
String somefield;
...
}
class ChildA extends Base {
...
}
class ChildB extends Base {
...
}
如果我编写一个自定义序列化程序,它在序列化之前明确地将 ChildA
和 ChildB
转换为 Base
,它会按预期工作。所以基本问题是 jackson 不识别父对象上的注释,如果没有明确告知的话。
关于java - jackson 自定义类型信息不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23064009/