在 Java 中从 Object 转换为 JSON 时额外的意外部分
Extra unexpected part when converting from Object to JSON in Java
我有一个对象,当我使用对象映射器将对象转换为字符串并 return 时。除了此对象中的属性外,我还发现显示了一个额外的键。例如
public class Person(){
private int age;
private String firstName;
private String lastName;
setter and getter for those properties above,
public String getFullName(){
return this.firstName + this.lastName;
}
}
为什么,我为这个人 class 获得的 JONS 包含一个名为 FullName 的密钥?为什么我能搭上它?是因为 Java 找到了全名的 getter 并自动认为全名是 属性 所以当我从 Person 对象转换为 JSON 时,它会添加它?
我认为 ObjectMapper 也会研究 getter 来序列化它,所以如果你只想序列化字段,那么你可以创建像 blow
这样的映射器对象
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, Visibility.NONE);
mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
或者,还有另一种方法,你可以在你想要序列化的class中指定注解。在 class
前添加如下注解
@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
Jackson 通常会在提供的 POJO 上序列化所有 getter 方法(除非另外配置)。要忽略 fullName
属性 的序列化,只需在 getter 方法上添加 @JsonIgnore
:
@JsonIgnore
public String getFullName() {
return this.firstName + this.lastName;
}
来自JavaDocs:
Marker annotation that indicates that the annotated method or field is to be ignored by introspection-based serialization and deserialization functionality. That is, it should not be consider a "getter", "setter" or "creator".
所以,基本上这意味着所有标有@JsonIgnore
的方法或字段将被序列化和反序列化忽略。
我有一个对象,当我使用对象映射器将对象转换为字符串并 return 时。除了此对象中的属性外,我还发现显示了一个额外的键。例如
public class Person(){
private int age;
private String firstName;
private String lastName;
setter and getter for those properties above,
public String getFullName(){
return this.firstName + this.lastName;
}
}
为什么,我为这个人 class 获得的 JONS 包含一个名为 FullName 的密钥?为什么我能搭上它?是因为 Java 找到了全名的 getter 并自动认为全名是 属性 所以当我从 Person 对象转换为 JSON 时,它会添加它?
我认为 ObjectMapper 也会研究 getter 来序列化它,所以如果你只想序列化字段,那么你可以创建像 blow
这样的映射器对象 ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, Visibility.NONE);
mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
或者,还有另一种方法,你可以在你想要序列化的class中指定注解。在 class
前添加如下注解 @JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
Jackson 通常会在提供的 POJO 上序列化所有 getter 方法(除非另外配置)。要忽略 fullName
属性 的序列化,只需在 getter 方法上添加 @JsonIgnore
:
@JsonIgnore
public String getFullName() {
return this.firstName + this.lastName;
}
来自JavaDocs:
Marker annotation that indicates that the annotated method or field is to be ignored by introspection-based serialization and deserialization functionality. That is, it should not be consider a "getter", "setter" or "creator".
所以,基本上这意味着所有标有@JsonIgnore
的方法或字段将被序列化和反序列化忽略。