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 使用此特定方法)
我正在使用 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 使用此特定方法)