@Transient方法导致错误“无法识别的字段(...),未标记为可忽略”

时间:2019-03-21 10:16:26

标签: json jackson resteasy transient

我正在序列化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
}

在我看来,有一个空的二传手没有多大意义。但是也许我的假设是在没有属性表示属性的情况下转移属性,这首先是错误的!?

1 个答案:

答案 0 :(得分:0)

使用JsonIgnoreProperties批注:

@JsonIgnoreProperties(ignoreUnknown = true)
public class Person {

摘自文档:

  

用于定义是否可以忽略所有无法识别的属性的属性   反序列化过程中的特性。如果为true,则所有   无法识别-也就是说,没有设置员或创建者接受   它们-在没有警告的情况下会被忽略(尽管未知的处理程序   属性(如果有)将毫无例外地被调用)。   对序列化没有任何影响。

另请参阅: