我有类使用@JsonTypeIdResolver
向输出添加自定义类型字段的类。此代码按预期工作。我现在已经为我的mapper对象添加了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);
由于过滤器没用(接受任何东西),输出应该是相同的。为什么我的类型字段不再被序列化?
答案 0 :(得分:0)
似乎杰克逊并没有以正确的方式处理遗产问题。我的测试设置就像
@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
,它会按预期工作。因此,基本问题是杰克逊不会识别父对象上的注释,如果没有明确告知这样做的话。