3

我正在使用 Jackson 注释将 JSON 响应解析为 POJO 对象。我在 POJO 中使用布尔变量来映射来自 JSON 的值“true”和“false”。但是突然间,我们将值作为“TRUE”和“FALSE”转换为 JSON 并解析这些值失败。任何人都可以建议将其映射到 boolean 的方法,因为这个变量在很多地方我不想将逻辑更改为 String 到 Boolean 。

4

3 回答 3

15

这不是一个真正的问题,这基本上是 BeanUtils 的工作方式。

对于booleanvars,Jacksonis从 setter 名称中删除以派生它在编组为 JSON 时期望的变量名称,并添加set到相同的派生名称以解组回 POJO。

所以boolean isFooTrue;最终会fooTrue在编组为 JSON 时结束,而在解组时它会尝试调用setIsFooTrue();,这是不正确的。

如果您使用的是 IDE 并生成了 getter/setter,您可能会注意到生成的代码boolean isFoo;基本上忽略了isvar 名称就好像foo

private boolean isFoo;

public boolean isFoo() {
    return isFoo;
}

public void setFoo(boolean isFoo) {
    this.isFoo= isFoo;
}

两个选项是is从 var 名称中删除 ,或将 添加is到 setter 名称中。

于 2013-08-01T19:56:21.797 回答
6

我在使用 Jackson Parser 1.8.5 时也遇到了类似的问题。Java POJO 到 JSON 的工作,但相同的 JSON 返回到 Java POJO 没有。在 Java POJO 中,如果布尔变量声明为

private Boolean isMyVar;

然后杰克逊产生等效的 JSON 作为

{..,
"myVar" : false,
..
}

(我知道这里的布尔变量命名是错误的,但是 JAR 是第三方的并且说你不能改变它!)

我认为这是杰克逊解析器设计用于处理布尔值的方式的一个问题。我将 JSON 从 "myVar" : false 更改为 "isMyVar" : false 并且从 JSON 创建回 Java POJO 工作正常。

有谁知道这仍然是一个错误还是已经解决?

于 2013-01-22T13:27:56.943 回答
6

我不确定这是你想要的。但它有效。

Boolean param = Boolean.parseBoolean((String)yourValue);

测试代码是

public class program10 {

    public static void main(String args[]) {

        String yourValue = "TRUE"; // This is what you get from json.
        Boolean param = Boolean.parseBoolean((String)yourValue);

        if(param == true) 
            System.out.println("Value is true");
        else
            System.out.println("Value is false");
        System.out.println(param);
    }
}
于 2012-09-07T10:35:34.177 回答