Что заставляет мою сериализацию 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();
}