Я работаю над обновлением микросервисов SpringBoot с версии 3.5.7 до версии 4.0.0. В это обновление включено обновление Jackson с v2 до v3. Рассматриваемая служба отправляет запрос GraphQL к другому микросервису, который возвращает несколько полей, из которых на данный момент следует отметить только два поля логического типа.
Мы видим сообщение об ошибке: tools.jackson.databind.exc.MismatchedInputException: невозможно сопоставить `null` с типом `boolean` (set DeserializationConfig.DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES на «false», чтобы разрешить)
До обновления мы не сталкивались с какими-либо ошибками, когда запросы были сделаны, а ответы не включали эти два логических значения, поскольку предыдущее значение Джексона по умолчанию для FAIL_ON_NULL_FOR_PRIMITIVES было установлено на false, которое теперь обновлено до true. Это создает впечатление простого исправления настройки JsonMapper и отключения этой функции, однако, похоже, это не работает, особенно для запросов GraphQL, поскольку мы можем обновить FIX_FIELD_NAME_UPPER_CASE_PREFIX до его предыдущего значения, и с ним все работает как положено.
Особенности кода
У нас есть аннотация @EnableWebMvc в классе WebConfig, которая реализует WebMvcConfigurer
Наш собственный JsonMapper создается и устанавливается, как показано ниже
@Override
public void configureMessageConverters(HttpMessageConverters.ServerBuilder builder){
JsonMapper Mapper = JsonMapper.builder()
.disable(MapperFeature.FIX_FIELD_NAME_UPPER_CASE_PREFIX)
.configure(DeserializationFeature.FAIL_ON_NULL_CREATOR_PROPERTIES, false)
.configure(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES, false)
.disable(DeserializationFeature.FAIL_ON_MISSING_CREATOR_PROPERTIES, DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES, DeserializationFeature.FAIL_ON_NULL_CREATOR_PROPERTIES)
.build();
builder.withJsonConverter(new JacksonJsonHttpMessageConverter(mapper));
WebMvcConfigurer.super.configureMessageConverters(builder);
Мы пробовали использовать строку WebMvcConfigurer.super.configureMessageConverters(builder) и без нее, ни один метод не работал
Мы пробовали с просто .disable, просто .configure и оба, ничего не помогло
Мы пытались создать один и тот же JsonMapper в методе Bean и вернуть его, как с основной аннотацией, так и без нее, ничего не получилось
Мы пытались создать ObjectMapper и установить его значения таким же образом, несмотря на то, что он устарел, это не сработало
Мы пытались установить ту же конфигурацию через наш application.properties, это не помогло работа
Я хотел бы еще раз подчеркнуть, что у нас есть подтверждение того, что наш пользовательский JsonMapper создан и правильно используется в другом месте нашего приложения, но он не используется только в отношении запросов GraphQL. Я проверил журналы изменений Spring Boot, журналы изменений Jackson, руководства по миграции для каждого из них и несколько других источников документации, ни в одном из которых нет работающих решений.
Подробнее здесь: https://stackoverflow.com/questions/798 ... jsonmapper
Springboot v4 GraphQL не использует собственный JsonMapper ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1765906740
Anonymous
Я работаю над обновлением микросервисов SpringBoot с версии 3.5.7 до версии 4.0.0. В это обновление включено обновление Jackson с v2 до v3. Рассматриваемая служба отправляет запрос GraphQL к другому микросервису, который возвращает несколько полей, из которых на данный момент следует отметить только два поля логического типа.
Мы видим сообщение об ошибке: tools.jackson.databind.exc.MismatchedInputException: невозможно сопоставить `null` с типом `boolean` (set DeserializationConfig.DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES на «false», чтобы разрешить)
До обновления мы не сталкивались с какими-либо ошибками, когда запросы были сделаны, а ответы не включали эти два логических значения, поскольку предыдущее значение Джексона по умолчанию для FAIL_ON_NULL_FOR_PRIMITIVES было установлено на false, которое теперь обновлено до true. Это создает впечатление простого исправления настройки JsonMapper и отключения этой функции, однако, похоже, это не работает, особенно для запросов GraphQL, поскольку мы можем обновить FIX_FIELD_NAME_UPPER_CASE_PREFIX до его предыдущего значения, и с ним все работает как положено.
Особенности кода
У нас есть аннотация @EnableWebMvc в классе WebConfig, которая реализует WebMvcConfigurer
Наш собственный JsonMapper создается и устанавливается, как показано ниже
@Override
public void configureMessageConverters(HttpMessageConverters.ServerBuilder builder){
JsonMapper Mapper = JsonMapper.builder()
.disable(MapperFeature.FIX_FIELD_NAME_UPPER_CASE_PREFIX)
.configure(DeserializationFeature.FAIL_ON_NULL_CREATOR_PROPERTIES, false)
.configure(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES, false)
.disable(DeserializationFeature.FAIL_ON_MISSING_CREATOR_PROPERTIES, DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES, DeserializationFeature.FAIL_ON_NULL_CREATOR_PROPERTIES)
.build();
builder.withJsonConverter(new JacksonJsonHttpMessageConverter(mapper));
WebMvcConfigurer.super.configureMessageConverters(builder);
Мы пробовали использовать строку WebMvcConfigurer.super.configureMessageConverters(builder) и без нее, ни один метод не работал
Мы пробовали с просто .disable, просто .configure и оба, ничего не помогло
Мы пытались создать один и тот же JsonMapper в методе Bean и вернуть его, как с основной аннотацией, так и без нее, ничего не получилось
Мы пытались создать ObjectMapper и установить его значения таким же образом, несмотря на то, что он устарел, это не сработало
Мы пытались установить ту же конфигурацию через наш application.properties, это не помогло работа
Я хотел бы еще раз подчеркнуть, что у нас есть подтверждение того, что наш пользовательский JsonMapper создан и правильно используется в другом месте нашего приложения, но он не используется только в отношении запросов GraphQL. Я проверил журналы изменений Spring Boot, журналы изменений Jackson, руководства по миграции для каждого из них и несколько других источников документации, ни в одном из которых нет работающих решений.
Подробнее здесь: [url]https://stackoverflow.com/questions/79848773/springboot-v4-graphql-not-making-use-of-custom-jsonmapper[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия