【发布时间】:2016-08-10 13:35:00
【问题描述】:
我在我的项目中使用以下杰克逊映射器。
org.codehaus.jackson jackson-mapper-asl 1.9.13
我的问题是,每当我尝试将 json 字符串转换为对象时,我都无法正确映射布尔值。这是一个非常奇特的问题。
如果我的属性名称以 "is" 开头,例如 "isFlag":true,则杰克逊不会阅读它。如果我将属性名称更改为"Flag":true,则会创建正确的对象。
参考Json:
{"ticketNumber": "0970897760","chartPrepared": true,"isFlag": true}
参考类:
class TestClass {
String ticketNumber;
boolean chartPrepared;
boolean isFlag;
public boolean isChartPrepared() {
return chartPrepared;
}
public void setChartPrepared(boolean chartPrepared) {
this.chartPrepared = chartPrepared;
}
public boolean isFlag() {
return isFlag;
}
public void setFlag(boolean isFlag) {
this.isFlag = isFlag;
}
public String getTicketNumber() {
return ticketNumber;
}
public void setTicketNumber(String ticketNumber) {
this.ticketNumber = ticketNumber;
}
}
}
功能:
TestClass obj = mapper.readValue(text, TestClass.class);
System.out.println(obj.getTicketNumber()+" "+obj.isChartPrepared()+" "+obj.isFlag());
实际输出:
0970897760 true false
预期输出:
0970897760 true true
【问题讨论】:
-
将 Json 中的
isFlag更改为flag,或将您的方法isFlag更改为isIsFlag -
感谢 BusyAnt 的回复。我想出了一个更好的解决方案。在 TestClass 中显式添加@JsonProperty("isFlag) 解决了这个问题。@JsonProperty("isFlag") boolean isFlag;
标签: jackson boolean deserialization json-deserialization objectmapper