JsonTypeInfo не сериализуется при использовании Джексона с Джерси - PullRequest
2 голосов
/ 04 февраля 2011

Я аннотировал класс 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"}]}

Спасибо, Выкуп

1 Ответ

0 голосов
/ 05 февраля 2011

Мне кажется, что вы не используете сериализацию на основе Джексона (то есть тот, который использует ObjectMapper; низкоуровневый генератор Джексона используется для большинства выходных данных JSON, включая те, где связывание выполняется по-другому).Если бы вы были, это определенно должно выглядеть так, как вы видите при явном использовании.Так что, похоже, стоит изменить конфигурацию JSON в Джерси.

...