2011-02-04 80 views
2

我使用JsonTypeInfo註釋了JAXB類,以便可以輕鬆地序列化多態類。但是,Jersey在序列化時不會顯示註釋。更具體地說,它在使用ObjectMapper時顯示,但不是從資源返回的類型。我現在很困惑,因爲這似乎是澤西島=>傑克遜互動的問題。JsonTypeInfo在使用Jackson和Jersey時不會序列化

爲了調試,我使用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 /航班結果

{"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"}]} 

感謝, 贖金

回答

0

我認爲它看起來像您不使用基於傑克遜序列化(也就是一個使用ObjectMapper;低級傑克遜生成器用於大多數JSON輸出,包括綁定完成不同的那些)。如果你是,它絕對應該看起來像你從明確使用看到的。所以它似乎是改變Jersey JSON配置的問題。

+0

謝謝,這有助於 - 我使用調試器來確保我正在訪問傑克遜庫 - 並指出它使用的是低級別的,而不是JAXB的是非常有用的。解決方案的其餘部分是添加以下內容。 – 2011-02-07 17:18:30

相關問題