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

Mah*_*esh 3 java json

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

Hal*_*lex 15

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

对于booleanvars,Jackson is从setter名称中删除,以便在编组到JSON时获得它期望变量名称的内容,并添加set到相同的派生名称以解组回POJO.

所以当编组到JSON时boolean isFooTrue;结束fooTrue,当解组时它会尝试调用setIsFooTrue();,这不正确.

如果您正在使用IDE并且生成了getter/setter,那么您可能会注意到生成的代码boolean isFoo;基本上忽略is了var名称只是foo:

private boolean isFoo;

public boolean isFoo() {
    return isFoo;
}

public void setFoo(boolean isFoo) {
    this.isFoo= isFoo;
}
Run Code Online (Sandbox Code Playgroud)

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


swe*_*mon 6

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

Boolean param = Boolean.parseBoolean((String)yourValue);
Run Code Online (Sandbox Code Playgroud)

经过测试的代码是

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);
    }
}
Run Code Online (Sandbox Code Playgroud)


Rah*_*ini 6

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

private Boolean isMyVar;
Run Code Online (Sandbox Code Playgroud)

然后杰克逊产生等效的JSON

{..,
"myVar" : false,
..
}
Run Code Online (Sandbox Code Playgroud)

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

我认为这是Jackson解析器设计用于处理布尔值的方式的问题.我将JSON从"myVar"更改为:false为"isMyVar":false并且可以从JSON创建Java POJO.

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