从其字符串表示中反序列化 POJO 数组成员
Deserialise POJO array member from its string representation
我正在寻找一种通用的方法来使用 Jackson a JSON 进行反序列化,例如:
{
"hello": "baby",
"eyes": "[blue,green]"
}
到 POJO,例如
public 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" 的值视为具有单个字符串元素“[blue,green]”的数组(其中无法转换为枚举 Color)
任何提示将不胜感激。
问题不在于 ACCEPT_SINGLE_VALUE_AS_ARRAY 导致 "eyes" 属性 被解释为具有单个元素的数组,该选项允许 Jackson 强制类型,以便
{
"hello": "baby",
"eyes": "[blue,green]"
}
与
的解释相同
[{
"hello": "baby",
"eyes": "[blue,green]"
}]
通过这种方式,单个元素可以与 Java 的集合一起使用,可以在
找到更多信息
就您的问题而言,最好的选择是将 JSON 与颜色作为 JSON 数组提交,例如:
{
"hello": "baby",
"eyes": [
"blue",
"green",
]
}
否则你可能需要让你的 Whatever
class 在带有 String 参数的 setEyes
方法上有 @JsonSetter
注释,你在其中解析 String 以手动创建Color
你自己的名单。
@JsonSetter
public void setEyes(final String eyes) {
// Parse string and set field here
}
我正在寻找一种通用的方法来使用 Jackson a JSON 进行反序列化,例如:
{
"hello": "baby",
"eyes": "[blue,green]"
}
到 POJO,例如
public 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" 的值视为具有单个字符串元素“[blue,green]”的数组(其中无法转换为枚举 Color)
任何提示将不胜感激。
问题不在于 ACCEPT_SINGLE_VALUE_AS_ARRAY 导致 "eyes" 属性 被解释为具有单个元素的数组,该选项允许 Jackson 强制类型,以便
{
"hello": "baby",
"eyes": "[blue,green]"
}
与
的解释相同[{
"hello": "baby",
"eyes": "[blue,green]"
}]
通过这种方式,单个元素可以与 Java 的集合一起使用,可以在
找到更多信息就您的问题而言,最好的选择是将 JSON 与颜色作为 JSON 数组提交,例如:
{
"hello": "baby",
"eyes": [
"blue",
"green",
]
}
否则你可能需要让你的 Whatever
class 在带有 String 参数的 setEyes
方法上有 @JsonSetter
注释,你在其中解析 String 以手动创建Color
你自己的名单。
@JsonSetter
public void setEyes(final String eyes) {
// Parse string and set field here
}