我正在调用外部Web服务来获取json对象.此对象具有属性"value",有时是String,有时是字符串数组.
public class MyClass {
// ... other variables
private String value;
public String getValue() {
return value;
}
@JsonProperty("value")
public void setValue(String value) {
this.value = value;
}
}
Run Code Online (Sandbox Code Playgroud)
目前,我收到一个错误org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.lang.String out of START_ARRAY token抱怨此字段.我想知道是否有人可以给我一个关于value在我班级中定义的正确方法的暗示.
这是我必须处理的示例json的一部分:
{
"id": 12016907001,
"type": "Create",
"value": "normal",
"field_name": "priority"
},
{
"id": 12016907011,
"type": "Create",
"value": [
"sample",
"another"
],
"field_name": "tags"
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
- 编辑
我将值的类型更改为Object,它解决了我的问题.但是,我仍然想知道是否有更好的方法来处理这种情况.
一个简单的黑客就是启用DeserializationFeature#ACCEPT_SINGLE_VALUE_AS_ARRAY,然后使用Daniel的答案.如果Web服务返回一个字符串,Jackson会将其转换为单元素集合.
编辑:
如果您无法升级到Jackson 1.8或更高版本以使用此功能,您可以执行以下操作:
private Collection<String> value;
public Collection<String> getValue() {
return value;
}
public void setValue(Object value) {
if (value instanceof Collection) {
this.value = (Collection<String>) value;
} else {
this.value = Arrays.asList((String) value);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2480 次 |
| 最近记录: |