2017-02-03 27 views
0

После переноса нашей заявки на войну с Glassfish3 до развертывания с Payara Micro, сериализация JAX-RS (джерси + джексон) больше не работает.JAX-RS: сериализация POJO не выполняется на payara micro

Благодаря Adam, мы решили вопрос с сериализацией чистых коллекций, мы теперь сталкиваемся подобные ошибки при возвращении объектов 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. 

Странно, что подобные интерфейсы в той же работе приложения штрафа.

Любая идея?

+0

Вы проверили, что .war содержит все необходимые зависимости Jackson? И вы могли бы добавить код класса BirdyTO. – FrAn

ответ

0

Сопоставление 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

Подробнее о том, как это сделать в этом swer: Customizing JSON marhsalling with GlassFish v4

+0

Информация о золоте и правильное решение. Большое спасибо! Все еще не знаю, почему MOXy не может отобразить некоторые POJO, но я думаю, что мы должны придерживаться джексона, так как мы создали наше приложение с ним в первую очередь. – simomat

+0

Мы получили его. Очевидно, что MOXy требует, чтобы транспортные POJO имели конструкторы по умолчанию. – simomat

+0

В Java EE 8 сопоставление должно быть стандартизировано спецификацией JSON-B. До тех пор поведение отличается в тонких различиях, подобных этому. Пожалуйста, отметьте ответ как правильный anwser :) – OndrejM