MessageBodyProviderNotFoundException: MessageBodyWriter не найден для типа носителя = приложение/json, тип = класс java.lang.Long

Столкнулся с проблемой при настройке функции Moxy Json из функции Джексона в приложение Springboot + Jersey.

Сделаны изменения -

В расширенном классе ResourceConfig -

//register(JacksonJsonProvider.class); #Commented
register(MoxyJsonFeature.class);

В файл Pom.xml добавлено следующее:

<dependency>
   <groupId>org.glassfish.jersey.media</groupId>
   <artifactId>jersey-media-moxy</artifactId>
   <version>2.23.2</version>
</dependency>

API

@Produces(MediaType.APPLICATION_JSON)
@Path("/")
@Api(value = "xyz")
public class XyzController {
    @GET
    @Path(Urls.XYZ)
    @ApiOperation(value = "xyz", notes = "xyz", nickname = "xyz")
    public Long xyz(@Valid @BeanParam final FetchParams fetchParams) {
        return testService.xyz(fetchParams);
    }
}

Исключение для API -

Caused by: org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/json, type=class java.lang.Long, genericType=class java.lang.Long.
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:247)
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
at org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.java:106)
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:86)

похоже, что входной параметр/полезная нагрузка и аргументы метода не совпадают, поделитесь полным журналом ошибок

TheSprinter 01.02.2019 12:12

Как уже упоминалось, ошибка возникает при сериализации вывода API.

SaratBhaswanth 02.02.2019 16:46

правильно, проверьте наличие элемента типа Long в объекте FetchParams. это может быть несоответствие полезной нагрузке JSON

TheSprinter 04.02.2019 07:44
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
2 573
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема решена для меня при использовании правильной аннотации @Produces.

В данном случае это был @Produces(MediaType.APPLICATION_JSON). Изменение его на @Produces(MediaType.TEXT_PLAIN) решило проблему.

Поскольку вывод длинный, он проходит через модель записи BasicTypesMessageProvider, которая сериализуется только для «текста/простого».

@Produces({"text/plain"})
@Consumes({"text/plain"})
@Singleton
final class BasicTypesMessageProvider extends AbstractMessageReaderWriterProvider<Object> {...}

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