泽西/杰克逊@JsonIgnore在二传手

2022-09-03 09:27:37

我有一个带有以下注释的类:

class A {
public Map<String,List<String>> references;

@JsonProperty
public Map<String,List<String>> getReferences() {
...
}

@JsonIgnore
public void setReferences(Map<String,List<String>>) {
}
...
}
}

我尝试的是忽略反序列化的json。但它不起作用。始终在 JSON 字符串到达时,Jackson lib 将填充 references 属性。如果我只使用@JsonIgnore注释,则 getter 不起作用。这个问题有什么解决方案吗?

谢谢


答案 1

我认为有两个关键部分应该使您能够根据需要拥有“只读集合”。首先,除了忽略 setter 之外,请确保您的字段还标有 :@JsonIgnore

class A {

  @JsonIgnore
  public Map<String,List<String>> references;

  @JsonProperty
  public Map<String,List<String>> getReferences() { ... }

  @JsonIgnore
  public void setReferences(Map<String,List<String>>) { ... }

}

其次,为了防止 getter 被用作 setter,请禁用该功能:USE_GETTERS_AS_SETTERS

ObjectMapper mapper = new ObjectMapper();
mapper.disable(MapperFeature.USE_GETTERS_AS_SETTERS);

答案 2

从 Jackson 2.6 开始,有一种新的和改进的方法来定义和属性,使用 JsonProperty#access() 注释。建议不要使用单独的注释和注释。read-onlywrite-onlyJsonIgnoreJsonProperty

@JsonProperty(access = JsonProperty.Access.READ_ONLY)
public Map<String,List<String>> references;