在 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的方法或字段将被序列化和反序列化忽略。