java - jackson 自定义类型信息不起作用

标签 java json jackson

我有一些类使用 @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 {
     ...
 }

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

关于java - jackson 自定义类型信息不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23064009/

相关文章:

java - AppEngine 端点 JsonMappingException - 避免字段被序列化

java - 在java lambda表达式中使用groupingBy时如何获取id列表

java - swing:事件监听器支持类

java - Jersey 无法编码数据 - 未找到 MIME 媒体类型 application/json

javascript - 尝试将 JSON 格式日期集合转换并显示为正常格式

javascript - 如何在 angularjs 中的简单获取请求 json 之后添加事件监听器?

java - Jackson 从字符串 JSON 对象生成 JsonSchema

java - 如何将包含字符串列表(内部列表)的对象列表转换为字符串列表

java - 如何正确添加 JVM 系统属性标志

iPhone:Http POST JSON 方法