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

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

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

对于boolean变量,Jackson删除了来自setter名称,以便在编组到JSON时派生它所期望的变量名称,并将set添加到相同的派生名称以解组回POJO。

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

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

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

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

我还遇到了使用Jackson Parser 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。

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

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

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