【发布时间】:2015-08-01 04:27:12
【问题描述】:
这是代码
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)
我的问题是:
- 为什么杰克逊在完成构建后修改了没有设置器的私有最终字段?如果这是有意的,我该如何关闭它?
- 如果jackson能够直接设置字段,为什么我需要用@JsonProperty注释构造函数? (从 Fields 中删除 @JsonProperty 会导致错误;我什至不需要使用正确的属性进行注释)
谢谢
【问题讨论】:
标签: java json jackson immutability lombok