我正在使用 Jackson 注释将 JSON 响应解析为 POJO 对象。我在 POJO 中使用布尔变量来映射来自 JSON 的值“true”和“false”。但是突然间,我们将值作为“TRUE”和“FALSE”转换为 JSON 并解析这些值失败。任何人都可以建议将其映射到 boolean 的方法,因为这个变量在很多地方我不想将逻辑更改为 String 到 Boolean 。
3 回答
这不是一个真正的问题,这基本上是 BeanUtils 的工作方式。
对于boolean
vars,Jacksonis
从 setter 名称中删除以派生它在编组为 JSON 时期望的变量名称,并添加set
到相同的派生名称以解组回 POJO。
所以boolean isFooTrue;
最终会fooTrue
在编组为 JSON 时结束,而在解组时它会尝试调用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;
}
两个选项是is
从 var 名称中删除 ,或将 添加is
到 setter 名称中。
我在使用 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 工作正常。
有谁知道这仍然是一个错误还是已经解决?
我不确定这是你想要的。但它有效。
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);
}
}