JAXB 클래스에 JsonTypeInfo를 주석으로 추가하여 다형 클래스를 쉽게 직렬화 할 수있었습니다. 그러나 Jersey가 연재 할 때 주석이 표시되지 않습니다. 보다 구체적으로, ObjectMapper를 사용할 때 나타나지만 자원의 반환 유형으로는 나타나지 않습니다. 저지가 Jackson과의 상호 작용에 문제가되는 것 같아서 지금 당황 스럽습니다.JsonTypeInfo가 Jersey와 함께 Jackson을 사용할 때 직렬화하지 않습니다.
디버깅하기 위해 저지 샘플의 jsonfromjaxb 예제를 사용하여 문제를 지역화했습니다. 클래스를 @class로 직렬화하도록하기 위해 다음을 Flight 클래스에 추가했습니다.
@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="@class")
나는 자원에서 사용할 수있는 다음과 같은 방법 그냥 JAXB 객체를 반환 한 수동 질의/jsonfromjaxb/항공편의
@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);
}
결과 ObjectMapper를 사용 하나가
{"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"}]}
01 23,516,
덕분에, 랜섬
덕분에, 저는 디버거를 사용하여 잭슨 라이브러리를 사용하고 있는지 확인했습니다. JAXB 라이브러리가 아닌 저수준 라이브러리를 사용하는 것이 매우 유용하다는 것을 지적했습니다. 솔루션의 나머지 부분은 다음과 같습니다. –
좋아 좋은 - 나는이 점을 명심해야합니다; 나는 이것이 꽤 많은 메일 링리스트 (저지 사용자)에 대한 FAQ라고 생각한다. – StaxMan