Что заставляет мою сериализацию Jackson ObjectMapper выводить недопустимый JSON (без кавычек вокруг ключей)?

Я вижу много вопросов о намеренном отбрасывании кавычек вокруг клавиш, но у меня есть противоположная проблема: я получаю неверный JSON и не знаю почему. Вот как создается мой ObjectMapper:

  @VisibleForTesting
  public static final ObjectMapper OBJECT_MAPPER = new ObjectMapper()
      .registerModule(new JodaModule())
      .registerModule(new GuavaModule())
      .registerModule(new AutoMatterModule())
      .registerModule(new Jdk8Module())
      .registerModule(new ProtobufModule())
      .setSerializationInclusion(JsonInclude.Include.NON_NULL)
      .configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)
      .configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES, false)
      .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
      .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);

Те, кто хочет отбросить кавычки, должны установить следующие элементы конфигурации:

mapper.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, false);
mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);

Но, как вы видите, я не настраиваю эти элементы конфигурации. Один из модулей или функций сериализации устанавливает один из этих элементов конфигурации побочным эффектом?


редактировать

Я выяснил, как проверить мой OBJECT_MAPPERКонфигурирование после построения путем вставки точки останова с использованием средства оценки выражений (символ калькулятора на панели отладчика для тех, кто хочет повторить эти шаги):

введите описание изображения здесь

введите описание изображения здесь

Таким образом, кажется, нет переопределения конфигурации. Может ли модуль полностью переопределить конфигурацию?


Редактировать 2

По запросу @EugenCovaci сериализуемый объект на самом деле является интерфейсом, который автоматически генерирует геттеры и сеттеры (подобная библиотека для AutoMapper):

import io.norberg.automatter.AutoMatter;

@AutoMatter
public interface CreativeData {
  UUID id();
  DateTime created();
  String name();
  String creativeType();
  String status();
  String title();
  AssetData asset();
  List<AssetData> companions();
  Optional<String> maybeRejectReason();
}

0 ответов

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