【问题标题】:Jackson custom type info not working杰克逊自定义类型信息不起作用
【发布时间】:2014-04-14 15:26:06
【问题描述】:

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

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

【问题讨论】:

  • 杰克逊的哪个版本?
  • 你能分享你试图序列化的类的代码吗?
  • 用你喜欢的任何 Pojos 试试吧。我创建了一个单独的项目来证明这种失败。同样的问题。即使您使用CLASS(内置)类型描述符,它也是同样的问题。编辑:我发现了这个问题,似乎这与继承有关。

标签: java json jackson


【解决方案1】:

杰克逊似乎没有以正确的方式处理继承问题。我的测试设置就像

 @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,它会按预期工作。所以基本问题是,如果没有明确告知,杰克逊无法识别父对象上的注释。

【讨论】:

  • 你没有加入@JsonSubTypes吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-29
  • 2018-10-19
  • 2016-09-25
  • 2019-05-09
  • 2014-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多