Десериализация Джексона в обход конечных полей ⇐ JAVA
Десериализация Джексона в обход конечных полей
Вот код
import com.fasterxml.jackson.annotation.JsonProperty; импортировать com.fasterxml.jackson.databind.ObjectMapper; импортировать ломбок.Данные; импортировать ломбок.ToString; общественный класс Main { public static void main(String[] args) выдает исключение { Поля f1 = новые поля(1); System.out.println(f1); Сопоставитель ObjectMapper = новый ObjectMapper(); String str = mapper.writeValueAsString(f1); System.out.println(str); Поля f2 = mapper.readValue(str, Fields.class); System.out.println(f2); } @Данные @Нанизывать Поля публичного статического класса { частное окончательное длинное значение1; частное окончательное длинное значение2; public Fields(@JsonProperty("blah") длинное значение) { это.значение1 = значение++; это.значение2 = значение++; System.out.println(это); } } } Вывод
Main.Fields(value1=1, value2=2) Main.Fields(значение1=1, значение2=2) {"значение1":1, "значение2":2} Main.Fields(значение1=0, значение2=1) Main.Fields(значение1=1, значение2=2) Мои вопросы:
[*]Почему Джексон изменил частные конечные поля, у которых нет установщиков, после завершения их создания? Если это так и задумано, как мне это отключить? [*]Если Джексон может задавать поля напрямую, почему я должен аннотировать конструктор @JsonProperty? (Удаление @JsonProperty из полей приводит к ошибке; и мне даже не нужно было комментировать правильные свойства)
Спасибо
Вот код
import com.fasterxml.jackson.annotation.JsonProperty; импортировать com.fasterxml.jackson.databind.ObjectMapper; импортировать ломбок.Данные; импортировать ломбок.ToString; общественный класс Main { public static void main(String[] args) выдает исключение { Поля f1 = новые поля(1); System.out.println(f1); Сопоставитель ObjectMapper = новый ObjectMapper(); String str = mapper.writeValueAsString(f1); System.out.println(str); Поля f2 = mapper.readValue(str, Fields.class); System.out.println(f2); } @Данные @Нанизывать Поля публичного статического класса { частное окончательное длинное значение1; частное окончательное длинное значение2; public Fields(@JsonProperty("blah") длинное значение) { это.значение1 = значение++; это.значение2 = значение++; System.out.println(это); } } } Вывод
Main.Fields(value1=1, value2=2) Main.Fields(значение1=1, значение2=2) {"значение1":1, "значение2":2} Main.Fields(значение1=0, значение2=1) Main.Fields(значение1=1, значение2=2) Мои вопросы:
[*]Почему Джексон изменил частные конечные поля, у которых нет установщиков, после завершения их создания? Если это так и задумано, как мне это отключить? [*]Если Джексон может задавать поля напрямую, почему я должен аннотировать конструктор @JsonProperty? (Удаление @JsonProperty из полей приводит к ошибке; и мне даже не нужно было комментировать правильные свойства)
Спасибо
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Десериализация Джексона: считать определенные строковые значения нулевыми.
Anonymous » » в форуме JAVA - 0 Ответы
- 20 Просмотры
-
Последнее сообщение Anonymous
-