Я аннотировал класс JAXB с помощью JsonTypeInfo, чтобы легко сериализовать полиморфные классы. Однако аннотация не отображается при сериализации Джерси. Чтобы быть более конкретным, он появляется при использовании ObjectMapper, но не как возвращаемый тип из ресурса. Я очень смущен прямо сейчас, так как это, кажется, проблема с взаимодействием Джерси => Джексон.
Для отладки я использовал пример jsonfromjaxb из jersey-samples, чтобы локализовать свою проблему. Я добавил следующее в класс 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"}]}
Спасибо, Рэнсом