Springboot v4 GraphQL не использует собственный JsonMapperJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Springboot v4 GraphQL не использует собственный JsonMapper

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

Подробнее здесь: https://stackoverflow.com/questions/798 ... jsonmapper
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»