簡體   English   中英

將Jackson與Jersey一起使用時,JsonTypeInfo不會序列化

[英]JsonTypeInfo does not serialize when using Jackson with Jersey

我用JsonTypeInfo注釋了JAXB類,以便可以輕松地序列化多態類。 但是,由Jersey序列化時,注釋不會顯示。 更具體地說,它在使用ObjectMapper時顯示,但不作為資源的返回類型顯示。 我現在非常困惑,因為這似乎與Jersey => Jackson互動有關。

為了調試,我使用了jersey-samples中的jsonfromjaxb示例來定位問題。 我將以下內容添加到Flights類中,以使其序列化為@class。

@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="@class")

我在資源中可以使用以下方法,一種僅返回JAXB對象,另一種手動使用ObjectMapper

@GET
@Produces({"application/json"})
public synchronized Flights getFlightList() {
    return myFlights;
}

@GET
@Path("/object_mapper")
@Produces({"application/json"})
public synchronized String getFlights() throws IOException {
    ObjectMapper mapper = new ObjectMapper();
    return mapper.writeValueAsString(myFlights);
}

查詢/ jsonfromjaxb / flights的結果

{"flight":[{"flightId":"OK123","company":"Czech Airlines","number":123,"aircraft":"B737"},{"flightId":"OK124","company":"Czech Airlines","number":124,"aircraft":"AB115"}]}

查詢/ jsonfromjaxb / flights / object_mapper的結果

{"@class":"com.sun.jersey.samples.jsonfromjaxb.jaxb.Flights","flight":[{"number":123,"company":"Czech Airlines","aircraft":"B737","flightId":"OK123"},{"number":124,"company":"Czech Airlines","aircraft":"AB115","flightId":"OK124"}]}

謝謝,贖金

我認為您似乎沒有使用基於Jackson的序列化(也就是說,使用ObjectMapper的序列化;大多數JSON輸出都使用了低級的jackson生成器,包括綁定方式有所不同的序列化)。 如果是的話,它肯定應該看起來像您從顯式使用中看到的一樣。 因此,似乎是更改Jersey JSON配置的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM