我正在使用Jackson注释将JSON响应解析为POJO对象.我在POJO中使用布尔变量来映射来自JSON的值"true"和"false".但突然之间,我们将JST中的值变为"TRUE"和"FALSE",并解析了这些值的失败.任何人都可以建议将它映射到布尔值的方法,因为这个变量被用在很多地方,我不想将逻辑更改为String到Boolean.
Hal*_*lex 15
这不是一个真正的问题,这基本上是BeanUtils的工作方式.
对于booleanvars,Jackson is从setter名称中删除,以便在编组到JSON时获得它期望变量名称的内容,并添加set到相同的派生名称以解组回POJO.
所以当编组到JSON时boolean isFooTrue;结束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;
}
Run Code Online (Sandbox Code Playgroud)
两个选项是is从var名称中删除,或添加is到setter名称.
我不确定这是你想要的.但它的确有效.
Boolean param = Boolean.parseBoolean((String)yourValue);
Run Code Online (Sandbox Code Playgroud)
经过测试的代码是
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我还遇到了使用Jackson Parser 1.8.5的类似问题.Java POJO到JSON工作但JSON回到Java POJO没有.在Java POJO中,如果布尔变量声明为
private Boolean isMyVar;
Run Code Online (Sandbox Code Playgroud)
然后杰克逊产生等效的JSON
{..,
"myVar" : false,
..
}
Run Code Online (Sandbox Code Playgroud)
(我知道布尔变量命名在这里是错误的,但是JAR是第三方,并说你不能改变它!)
我认为这是Jackson解析器设计用于处理布尔值的方式的问题.我将JSON从"myVar"更改为:false为"isMyVar":false并且可以从JSON创建Java POJO.
有谁知道这仍然是一个错误还是已经解决了?
| 归档时间: |
|
| 查看次数: |
27990 次 |
| 最近记录: |