У меня есть два экземпляра ObjectMapper Джексона. (С использованием v2.8.3)
Первый экземпляр создается следующим образом:
ObjectMapper objectMapper = new ObjectMapper();
Другой автоматически подключается из контекста Spring Boot через @Autowired
.
Обе имеют одинаковые конфигурации видимости, подобные этой:
Но они производят разные сериализации для одного и того же объекта. Различия, которые я понял, заключаются в следующем:
- Порядок сериализованных полей
- Сериализация защищенных переходных полей. (Экземпляр с автопроводкой вообще не сериализует их.)
- Различия в регистре в сериализованных полях, то есть в первом генерируется «MonitoringUserID», а во втором - «MonitoringUserID».
То, что я хочу, это то, что автоматически проводной преобразователь также сериализует защищенные переходные поля.
Я также был бы рад, если вы сообщите мне причины других различий в обеих сериализациях.
Упрощенная версия сериализуемого примера класса:
public class ClauseType implements Serializable {
protected transient List<ClauseTypeNoteItem> noteItems;
public ClauseType() {
}
public List<ClauseTypeNoteItem> getNoteItems() {
...
}
public void setNoteItems(List<ClauseTypeNoteItem> value) {
...
}
}
Полный класс ClauseType: https://pastebin.com/m3h1hesn
Завершить класс ClauseTypeNoteItem: https://pastebin.com/dmphNV4e
Edit:
Я понял, что оба экземпляра имеют функции отображения различий. Согласно документам, после включения функции DEFAULT_VIEW_INCLUSION
экземпляра с автопроводкой у них были те же функции сопоставления, что и у 1068991. Однако различия все еще сохраняются. Я также понял, что в автопроводном маппере есть два зарегистрированных модуля: org.springframework.boot.jackson.JsonComponentModule
и com.fasterxml.jackson.datatype.joda.JodaModule
. Я не уверен, влияет ли второй модуль на результаты, которые я получаю.
Заранее спасибо.