Я аннотировал класс JAXB с помощью JsonTypeInfo, чтобы можно было легко сериализовать полиморфные классы. Тем не менее, аннотация не отображается при сериализации на Джерси. Чтобы быть более конкретным, он отображается при использовании ObjectMapper, но не в качестве типа возврата из ресурса. Я сейчас очень смущен, так как кажется, что это проблема взаимодействия Джерси => Джексона.
Для отладки я использовал пример jsonfromjaxb из примеров джерси, чтобы локализовать мою проблему. Я добавил следующее в класс «Полеты», чтобы сериализовать его в класс @.
@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
{"flight":[{"flightId":"OK123","company":"Czech Airlines","number":123,"aircraft":"B737"},{"flightId":"OK124","company":"Czech Airlines","number":124,"aircraft":"AB115"}]}
Результат запроса / jsonfromjaxb / flight / 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"}]}
Спасибо,
Выкуп