我們有一整套運行在Apache CXF和Jackson上的JAX-RS REST服務。 我們使用JAXB註釋來處理將JSON編組爲POJO,效果很好。如何通過傑克遜傳遞原始JSON?
但是,我們有一個或兩個地方想要返回原始JSON字符串(我們從Redis緩存中獲取)。
Jackson總是用雙引號將字符串包裝起來,並將其中的所有雙引號轉義出來。
@GET @Produces("application/json")
public Response getData() {
String json = ...get from Redis...
return Response.ok(json,"application/json").build()
}
給我們
"{\"test\":1}"
,而不是
{"test":1}
我已經試過許多東西,加入RawSerializer(String.class)到對象映射器,沒有什麼工作。唯一可行的是,如果我設置的介質類型爲普通字符串,它繞過傑克遜,但並不好,因爲我返回錯誤的內容類型
即
return Response.ok(json,"text/plain").build()
作品,但不良(錯誤的內容類型,它擰起來.Net WCF應用程序,打電話給我們)
我不得不使用地圖,讓澤西正確解析它...我添加了JacksonJsonProvider與mapper.setVisibility(PropertyAccessor.FIELD,Visibility.ANY); –