JAX-RS: сериализация POJO не работает на Payara Micro
После переноса нашей войны приложений из Glassfish3 в развертывание с Payara Micro сериализация JAX-RS (Джерси + Джексон) больше не работает.
Благодаря Адаму, мы решили проблему с сериализацией чистых коллекций, теперь мы сталкиваемся с похожими ошибками при возврате POJO:
@GET
@Produces("application/json")
public BirdyTO findAllDaBirdy() {
return getBirdy();
}
где BirdyTO - POJO, который содержит другие POJOS и / или коллекции POJOS.
Это дает нам ошибку:
MessageBodyWriter not found for media type=application/json;charset=utf-8, type=class org.example.BirdyTO, genericType=class org.example.BirdyTO.
Странно то, что похожие интерфейсы в одном приложении работают нормально.
Любая идея?
1 ответ
Отображение POJO в JSON не стандартизировано в Java EE. Glassfih 4/Payara используют MOXy для отображения POJO в JSON по умолчанию, который использует JAXB для отображения. Смотрите [этот пост Резы Рахмана] ( https://blogs.oracle.com/theaquarium/entry/moxy_is_the_new_default). Вполне возможно, что BirdyTO не может быть отображен на Moxy.
Если вы хотите использовать Джексона, вы должны:
- отключить функцию Moxy по умолчанию (установив
jersey.config.server.disableMoxyJson
собственность наtrue
) - добавить библиотеку Джексона в свое приложение (
com.fasterxml.jackson.jaxrs
) - включите JacksonFeature (предоставляется библиотекой Джексона) в вашем приложении JAX-RS
Подробнее о том, как это сделать, можно узнать из этого ответа: Настройка маркерной продажи JSON с помощью GlassFish v4.