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

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

enter image description here

enter image description here

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


Edit 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...