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