将Jackson 2.x配置为不使用@XmlElement字段注释进行JSON字段命名

时间:2014-11-05 21:08:50

标签: java json jaxb jackson

我查看了这个question,并使用

使其工作
.configure(DeserializationConfig.Feature.USE_ANNOTATIONS, true)
.configure(SerializationConfig.Feature.USE_ANNOTATIONS, true);

在我的自定义ObjectMapper

使用上述配置,Json序列化可以正常工作。

但问题是我现在想使用Jackson 2.x是因为更好的反序列化控制,我找不到任何好的文档来说明如何配置jackson 2.x来忽略JAXB注释

任何帮助都将不胜感激。

更新:我尝试了objectMapper.configure(MapperFeature.USE_ANNOTATIONS, false);但这似乎对杰克逊拿起JAXB注释没有任何影响。

第二次更新:将以下解决方案作为答案发布。

1 个答案:

答案 0 :(得分:1)

我找到的解决方案是创建我的ObjectMapper,然后在main方法中使用jersey注册它(我使用带球衣的SpringBoot作为完整的解决方案)。

如果我在其他类中创建ObjectMapper并尝试在main中注册它,则不会调用该类的构造函数,也不会调用重写的getContext()方法。所以我在main方法中创建了ObjectMapper,并使用jersey注册了提供程序。

段:

ObjectMapper mapper = new ObjectMapper();
mapper.enable(MapperFeature.USE_ANNOTATIONS);

// create JsonProvider to provide custom ObjectMapper
JacksonJsonProvider provider = new JacksonJsonProvider();
provider.setMapper(mapper);

register(provider);

Maven依赖项,作为注释和JacksonJsonProvider可用于不同的工件:

<dependency>
       <groupId>com.fasterxml.jackson.module</groupId>
       <artifactId>jackson-module-jaxb-annotations</artifactId>
</dependency>
<dependency>
       <groupId>com.fasterxml.jackson.jaxrs</groupId>
       <artifactId>jackson-jaxrs-json-provider</artifactId>
</dependency>

希望它有所帮助。