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