我正在使用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成员。
答案 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,因此未映射。