【发布时间】:2018-12-03 12:08:05
【问题描述】:
我有带有布尔 (isBlocked) 参数的 JSON 响应
{"isBlocked":true,"responseId":"ab123456789", "other":"irrelevant"}
我的 ResponseVO(使用 Eclipse 自动生成 getter 和 setter):
@JsonIgnoreProperties(ignoreUnknown = true)
public class ResponseVO {
private boolean isBlocked;
private String responseId;
public boolean isBlocked() {
return isBlocked;
}
public void setBlocked(boolean isBlocked) {
this.isBlocked = isBlocked;
}
public String getResponseId() {
return responseId;
}
public void setResponseId(String responseId) {
this.responseId = responseId;
}
}
我正在使用ObjectMapper 设置 VO 对象
ResponseVO responseVO = new ObjectMapper().readValue(response, ResponseVO.class);
但是布尔参数设置为false而不是true
logger.debug("SpelPaus Block=" + responseVO.isBlocked());
【问题讨论】:
-
您的 JSON 应该有一个名为“blocked”的属性,而不是“isBlocked”。或者你应该有一个 JsonProperty 注释告诉杰克逊使用“isBlocked”而不是“blocked”。
-
在我在本地尝试之前,我会假设您的命名已关闭。我猜应该是
setIsBlocked和isIsBlocked,因为字段名包含is。您可以使用@JsonProperty注释来设置 JSON 道具的名称。 // 编辑:是的,重命名 getter 和 setter 或将@JsonProperty("isBlocked")添加到字段中。 -
@Tom 添加 JsonProperty 有效,但 getter/setter 是自动生成的,是否也是 eclipse 问题?
-
Eclipse 没有问题。问题是 JSON 中的错误命名(如 JB Nizet 解释的那样),并且 ObjectMapper 可能会使用反射和原始数据查找 getter 和 setter(当没有具有适当注释
@JsonGetter或@JsonSetter的匹配方法时)字段名称附加get/is和set到该名称 -
@Tom 我不能将其归咎于 命名错误,因为这是第三方响应
标签: java json eclipse boolean objectmapper