杰克逊定制类型信息不起作用

时间:2014-04-14 15:26:07

标签: java json jackson

我有类使用@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);

由于过滤器没用(接受任何东西),输出应该是相同的。为什么我的类型字段不再被序列化?

1 个答案:

答案 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 {
     ...
 }

如果我编写一个自定义序列化程序,在序列化之前明确地将ChildAChildB强制转换为Base,它会按预期工作。因此,基本问题是杰克逊不会识别父对象上的注释,如果没有明确告知这样做的话。