我正在使用Jackson注解将JSON响应解析为POJO对象。在POJO中,我使用布尔变量来映射来自JSON的值"true"和"false"。但突然间,我们得到了值为"TRUE"和"FALSE"的JSON数据,这些值无法正常解析。
有人能否建议一种方法将其映射为布尔类型,因为这个变量被用于很多地方,我不想改变逻辑从字符串到布尔类型。
这并不是一个问题,这就是 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名称中。
我也遇到了类似的问题,使用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还是已经被解决了吗?
我不确定这是否是您想要的。 但它可以工作。
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);
}
}