我正在寻找一种通用的方法来解密杰克逊JSON,如:
{
"hello": "baby",
"eyes": "[blue,green]"
}
到诸如
之类的POJOpublic class Whatever {
@Setter private String hello;
@Setter private List<Color> eyes;
}
将Color作为枚举。
当我像下面那样天真地尝试时:
ObjectMapper mapper = new ObjectMapper();
mapper.convertValue(properties, objectClass);
我收到错误
Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token
显然这是因为Jackson只能从JSON数组中反序列化数组,而不是它们的字符串表示。
我尝试激活ACCEPT_SINGLE_VALUE_AS_ARRAY,但它会将属性“eyes”的值视为具有单个String元素“[blue,green]”的数组(无法转换为枚举颜色)
任何提示都会非常感激。
答案 0 :(得分:1)
问题不在于ACCEPT_SINGLE_VALUE_AS_ARRAY导致&#34;眼睛&#34;要被解释为具有单个元素的数组的属性,该选项允许Jackson强制类型以便
{
"hello": "baby",
"eyes": "[blue,green]"
}
将被解释为与
相同[{
"hello": "baby",
"eyes": "[blue,green]"
}]
这样,单个元素可以与Java的集合一起使用,可以在
找到更多信息就你的问题而言,最好的选择是将JSON作为JSON数组提交,如:
{
"hello": "baby",
"eyes": [
"blue",
"green",
]
}
否则,您可能需要让Whatever
类在@JsonSetter
方法上使用String参数进行setEyes
注释,您可以在其中解析字符串以手动创建{{1}的列表你自己。
Color