У меня есть два экземпляра Джексона 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
Изменить: я понял, что оба экземпляра имеют функции сопоставления различий. Согласно документам, после включения функции DEFAULT_VIEW_INCLUSION
экземпляра с автоматическим подключением у них были те же функции сопоставления, представленные как 1068991. Однако различия все еще существуют. Я так же понял, что у autowired mapper есть два зарегистрированных модуля: org.springframework.boot.jackson.JsonComponentModule
и com.fasterxml.jackson.datatype.joda.JodaModule
. Я не уверен, влияет ли второй модуль на результаты, которые я получаю.
Заранее спасибо.