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