【问题标题】:Not able to deserialise boolean values properly through Jackson无法通过杰克逊正确反序列化布尔值
【发布时间】: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


【解决方案1】:

感谢 BusyAnt 的回复。我想出了一个更好的解决方案。在 TestClass 中显式添加 @JsonProperty("isFlag) 解决了这个问题。

@JsonProperty("isFlag")
boolean isFlag;

【讨论】:

    【解决方案2】:

    我认为这是因为 Jackson 期望 getXxx() 即使是布尔值,所以使用 Boolean 而不是 boolean 总是更好,因为当您在任何 IDE 中生成 getter/setter 时,您只会得到 isFlag()对于boolean 原始类型,但如果是Boolean,您将拥有getFlag()

    【讨论】:

      猜你喜欢
      • 2022-12-12
      • 2019-08-04
      • 2020-04-21
      • 2020-06-18
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 2015-04-07
      • 1970-01-01
      相关资源
      最近更新 更多