2011-05-14 48 views
3

當在澤西島使用Jackson JSON處理器時,何時以及爲什麼我需要在JAXB之間使用註釋? Object->JAXB->JSONjackson with jaxb

傑克遜還提供它自己的JAX-RS供應商去直接Object->JSON。這種方法缺少什麼?爲什麼我寧願上對另一

PS:我用的也是春天

回答

10

爲了生成JSON,你通常只需要specifiy @Produces(MediaType.APPLICATION_JSON)。然而,這將默認採用JAXB路由。

使用Object - > JAXB - > JSON,您將不得不註釋要與@XmlRootElement映射的類。這將工作得很好,但一旦你序列化一個HashMap你不會最終明顯的{keyOne:"one",keyTwo:"two"},而是像{entry:[{key:"keyOne",value:"one"},{key:"keyTwo",value:"two"}]}奇怪的東西。

所以採取的直接對象 - > JSON的方式,只是指定你的web.xml如下:

<init-param> 
     <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
     <param-value>true</param-value> 
    </init-param> 

有了這個JSON映射的工作只是你期望的方式工作。只要不要忘記刪除@XmlRootElement註釋,它們會在POJO映射打開時強制生成XML。

也可以看看我的問題關於這一點:Java.util.Map to JSON Object with Jersey/JAXB/Jackson

參考:http://jersey.java.net/nonav/documentation/latest/json.html#d4e894

+0

謝謝,你說要刪除@XmlRootElement,但是如果我不使用任何JAXB,那麼來自哪裏呢?我的一個資源類實現了另一個項目參考的接口類。那是問題嗎? – Spring 2011-05-14 19:06:59

+0

我其實不確定是否需要移除;傑克遜不會要求它(即沒有傷害),雖然也許澤西有一些具體的處理。 – StaxMan 2011-05-16 20:26:37

2

你只需要使用JAXB註釋,如果你也想生產/消費數據作爲XML。

如果您只關心JSON,請勿使用JAXB註釋;除傑克遜註釋之外,他們沒有提供任何內容。事實上,大多數情況下,基本案例可以通過使用Java Bean命名約定而無需任何註釋來處理。

相關問題