Вот код
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Data;
import lombok.ToString;
public class Main {
public static void main(String[] args) throws Exception {
Fields f1 = new Fields(1);
System.out.println(f1);
ObjectMapper mapper = new ObjectMapper();
String str = mapper.writeValueAsString(f1);
System.out.println(str);
Fields f2 = mapper.readValue(str, Fields.class);
System.out.println(f2);
}
@Data
@ToString
public static class Fields {
private final long value1;
private final long value2;
public Fields(@JsonProperty("blah") long value) {
this.value1 = value++;
this.value2 = value++;
System.out.println(this);
}
}
}
Выход
Main.Fields(value1=1, value2=2)
Main.Fields(value1=1, value2=2)
{"value1":1,"value2":2}
Main.Fields(value1=0, value2=1)
Main.Fields(value1=1, value2=2)
Мои вопросы:
- Почему Джексон изменил закрытые конечные поля, у которых нет сеттеров, после завершения их создания? Если так и задумано, как отключить?
- Если Джексон может устанавливать поля напрямую, почему требуется, чтобы я аннотировал конструктор с помощью @JsonProperty? (Удаление @JsonProperty из полей приводит к ошибке, и мне даже не нужно было комментировать правильные свойства)
Спасибо