Jackson databind JSON布尔转换

时间:2018-01-23 23:00:38

标签: java json jackson pojo

我正在使用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中,但是boolean没有绑定,因此我得到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成员。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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

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