Десериализация Джексона в обход конечных полейJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Десериализация Джексона в обход конечных полей

Сообщение Anonymous »


Вот код

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 из полей приводит к ошибке; и мне даже не нужно было комментировать правильные свойства)
Спасибо
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»