我正在使用 jackson 2.10.0 ( https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core/2.10.0 ),以下是一个简单的测试用例Person类的定义如下,对于setter,我使用了@JsonSetter注解,而对于getter没有使用@JsonGetter,import com.fasterxml.jackson.annotation.JsonProperty;public class Person { private String firstName; private String lastName; public String getFirstName() { return firstName; } @JsonSetter("first_name") public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } @JsonSetter("last_name") public void setLastName(String lastName) { this.lastName = lastName; }}然后,我创建一个 Person 对象,并将其序列化为字符串,import com.fasterxml.jackson.databind.ObjectMapper;public class Person3Test2 { public static void main(String[] args) throws Exception { Person p = new Person(); p.setFirstName("abc"); p.setLastName("def"); String str = new ObjectMapper().writeValueAsString(p); System.out.println(str); }}它会调用 Person 的 getter,因为它不使用 @JsonGetter,所以我认为输出应该是{"firstName":"abc","lastName":"def"}但是,我惊讶地发现它是:{"first_name":"abc","last_name":"def"}看来 @JsonSetter 影响了 getter 输出,我想问这里的行为是什么。
1 回答
慕容森
TA贡献1853条经验 获得超18个赞
@JsonSetter
会在序列化期间生效,这也是 github 问题,如果你想要不同的名称,只需@JsonGetter
在get
方法上使用另一个注释
文档可能有误;@JsonSetter 不仅影响反序列化。虽然它确实可以用于非对称命名(类似于 @JsonProperty 本身带有“split”注释),但它的范围不受限制。可能在某个时候是这样,但是在统一属性处理之后(在 1.8 左右),各种属性访问器之间的分离程度减少了。
我可以查看 Javadoc 来明确指出,没有任何注释的范围受到严格限制——有些注释可能只与其中之一相关,但没有一个注释是有意分开的。
添加回答
举报
0/150
提交
取消