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.

Другие вопросы по тегам