使用Jackson JSON解析将TRUE或FALSE转换为布尔值

3

我正在使用Jackson注解将JSON响应解析为POJO对象。在POJO中,我使用布尔变量来映射来自JSON的值"true"和"false"。但突然间,我们得到了值为"TRUE"和"FALSE"的JSON数据,这些值无法正常解析。

有人能否建议一种方法将其映射为布尔类型,因为这个变量被用于很多地方,我不想改变逻辑从字符串到布尔类型。

3个回答

16

这并不是一个问题,这就是 BeanUtils 的工作方式。

对于 boolean 变量,Jackson 会从 setter 名称中删除 is,以推导出在将其编组为 JSON 格式时变量名称的期望值,并向该派生名称添加 set 以使其能够解组回 POJO。

因此,boolean isFooTrue; 最终会被编组为 fooTrue,当解组时会尝试调用 setIsFooTrue();,但这是不正确的。

如果您正在使用 IDE 并生成了 getter/setter,则可能会注意到 boolean isFoo; 的生成代码基本上忽略了 is,好像变量名只是 foo

private boolean isFoo;

public boolean isFoo() {
    return isFoo;
}

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

两个选项是将变量名称中的is删除,或将is添加到setter名称中。


6

我也遇到了类似的问题,使用Jackson解析器1.8.5。 将Java POJO转换为JSON可以工作,但是将同样的JSON转回Java POJO却无法工作。 在Java POJO中,如果一个布尔变量被声明为

private Boolean isMyVar;

然后Jackson生成与以下JSON等效的结果

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

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

我认为这是Jackson解析器处理布尔值的方式的问题。我将JSON从"myVar":false改为"isMyVar":false,并成功地从JSON创建了Java POJO。

有人知道这是否仍然是一个bug还是已经被解决了吗?


我在1.9.2版本仍然遇到这个问题。 - user69173

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);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接