當在澤西島使用Jackson JSON
處理器時,何時以及爲什麼我需要在JAXB
之間使用註釋? Object->JAXB->JSON
jackson with jaxb
傑克遜還提供它自己的JAX-RS
供應商去直接Object->JSON
。這種方法缺少什麼?爲什麼我寧願上對另一
PS:我用的也是春天
當在澤西島使用Jackson JSON
處理器時,何時以及爲什麼我需要在JAXB
之間使用註釋? Object->JAXB->JSON
jackson with jaxb
傑克遜還提供它自己的JAX-RS
供應商去直接Object->JSON
。這種方法缺少什麼?爲什麼我寧願上對另一
PS:我用的也是春天
爲了生成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
你只需要使用JAXB註釋,如果你也想生產/消費數據作爲XML。
如果您只關心JSON,請勿使用JAXB註釋;除傑克遜註釋之外,他們沒有提供任何內容。事實上,大多數情況下,基本案例可以通過使用Java Bean命名約定而無需任何註釋來處理。
謝謝,你說要刪除@XmlRootElement,但是如果我不使用任何JAXB,那麼來自哪裏呢?我的一個資源類實現了另一個項目參考的接口類。那是問題嗎? – Spring 2011-05-14 19:06:59
我其實不確定是否需要移除;傑克遜不會要求它(即沒有傷害),雖然也許澤西有一些具體的處理。 – StaxMan 2011-05-16 20:26:37