Jackson 数据绑定 JSON 布尔转换

Jackson databind JSON boolean conversion

我正在使用 Jackson objectMapper 将 JSON 转换为对象并进行一些转换并将其转换回 JSON。

JSON就像 { "id":"abc1243", "val":1, "isDel":true}

上面的val是int,isDel是boolean。

我的对象定义如下

public class MyObj{
  private String id;
  private String val;
  private String isDel;
   //getters and setters

}

当我将 JSON 转换为 MyObj 时,String id 和 Int val 绑定到 String 但布尔值未绑定,因此我得到 null。

我使用以下方法

   ObjectMapper mapper = new ObjectMapper();
    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
    try {
        MyObj myObj = mapper.readValue(new File("/Users/sample.json"), MyObj.class);
}

请问为什么布尔值没有绑定到 String 成员。

将JSON中的boolean映射到Java中的布尔值是很自然的。

Checkout line 141 deserializeIfNatural() 其中令牌类型使用 class 使用 base.isAssignableFrom(Boolean.class) 进行测试,在这种情况下它不可分配,因为它是 String 因此未映射。

您可以有一个 setter 接受布尔值并进行必要的转换

@JsonProperty("isDel")
public void setIsDel(boolean isDel) {
  this.isDel = String.valueOf(isDel);
}

注意:这不会干扰接受 String 的 setter(注释告诉 Jackson 使用此特定方法)