2014-11-05 16 views
2

我已經看過這個question,並使其在我的自定義工作中使用配置傑克遜2.x中不使用@XmlElement場標註爲JSON場命名

.configure(DeserializationConfig.Feature.USE_ANNOTATIONS, true) 
.configure(SerializationConfig.Feature.USE_ANNOTATIONS, true); 

ObjectMapper

JSON序列化工作正常上述配置。

但問題是,我想用,因爲現在更好的反序列化控制的傑克遜2.x和我找不到任何好的文件說明如何配置傑克遜2.x到忽略JAXB註釋

任何幫助,將不勝感激。

UPDATE:我試過objectMapper.configure(MapperFeature.USE_ANNOTATIONS, false);,但是這似乎對傑克遜拾取JAXB註釋沒有影響。

第二次更新:發佈了以下解決方案作爲答案。

回答

1

我找到的解決方案是創建我的ObjectMapper,然後在主要方法(我使用SpringBoot和球衣作爲完整的解決方案)內註冊該球衣。

如果我在其他類中創建了ObjectMapper並試圖在main中註冊它,那麼該類的構造函數都不會被調用,也不會覆蓋getContext()方法。所以我在主要方法中創建了ObjectMapper並用球衣註冊了提供者。

段:

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> 

希望它能幫助。

+0

進一步的重構意識到這個問題主要是通過'@Provider'註解與球衣註冊一個類。您仍然可以將ObjectMapper的這種配置移動到它自己的或新的類的方法,但是通過方法調用對象而不是ClassName.class註冊它。 (並且你也不需要在新類上添加'@Provider'註釋) – Harshdeep 2014-11-06 16:14:02