我正在序列化一个Java类,将其作为JSON对象传输到我的客户端。该类具有各种属性和一组@Transient
方法,这些方法组合了这些属性的子集。瞬态方法没有任何变量来备份它们。
public class Person {
private String firstName;
private String lastName;
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getFirstName() {
return firstName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getLastName() {
return lastName;
}
@Transient
public String getFullName() {
return firstName + " " + lastName;
}
}
从服务器读取对象时,这很好。但是,当我尝试保存JSON对象时,它会导致瞬态方法出现此错误:
“无法识别的字段(...),未标记为可忽略”
我不想为瞬态属性引入变量,我仍然希望将瞬态方法的返回值从服务器传输到客户端。我怎样才能做到这一点?
我尝试的是这个,但我不确定,如果我完全理解@Json*
注释的想法:
@Transient
@JsonProperty
public String getFullName() {
return firstName + " " + lastName;
}
@JsonIgnore
public void setFullName(String fullName) {
// Empty method
}
在我看来,拥有一个空的二传手并没有多大意义。但也许我假设有一个属性转移而没有代表它的属性,首先是错误的!?
使用JsonIgnoreProperties
注释:
@JsonIgnoreProperties(ignoreUnknown = true)
public class Person {
来自文档:
定义在反序列化期间是否可以忽略任何无法识别的属性的属性。如果为true,则无法识别所有无法识别的属性(即,没有可接受它们的setter或创建者)将被忽略而不会发出警告(尽管仍会调用未知属性的处理程序,如果有的话)。对序列化没有任何影响。
也可以看看: