我正在使用杰克逊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);
}
}
由于不使用@JsonGetter,它将调用Person的吸气剂,所以我认为输出应该是
{"firstName":"abc","lastName":"def"}
但是,我很惊讶地发现它是:
{"first_name":"abc","last_name":"def"}
@JsonSetter似乎影响了吸气剂的输出,我想问一下这是怎么回事。
答案 0 :(得分:2)
@JsonSetter
将在序列化期间生效,here也是github问题,如果您想使用其他名称,只需在@JsonGetter
方法上使用另一个注释get
文档可能有误; @JsonSetter不仅影响反序列化。尽管它确实可以用于非对称命名(类似于@JsonProperty本身,带有“ split”注释),但其范围不受限制。 可能在某个时候,但是统一属性处理后(在1.8左右),各种属性访问者之间的分隔变得较少。
我可以回顾一下Javadocs,以明确说明注解的范围没有严格限制-某些注解可能仅与一个或另一个相关,而没有一个是有意分离的。