gpt4 book ai didi

java - 从 POJO 数组成员的字符串表示形式反序列化

转载 作者:行者123 更新时间:2023-12-01 10:33:08 25 4
gpt4 key购买 nike

我正在寻找一种通用方法来使用 Jackson 反序列化 JSON,例如:

{
"hello": "baby",
"eyes": "[blue,green]"
}

到一个 POJO,例如

public class Whatever {
@Setter private String hello;
@Setter private List<Color> eyes;
}

颜色是一个枚举。

当我像下面这样天真地尝试时:

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 导致“眼睛”属性被解释为具有单个元素的数组,该选项允许 Jackson 强制类型,以便

{
"hello": "baby",
"eyes": "[blue,green]"
}

将被解释为相同

[{
"hello": "baby",
"eyes": "[blue,green]"
}]

通过这种方式,单个元素可以与 Java 集合一起使用,更多信息可以在以下位置找到:

http://fasterxml.github.io/jackson-databind/javadoc/2.0.0/com/fasterxml/jackson/databind/DeserializationFeature.html#ACCEPT_SINGLE_VALUE_AS_ARRAY

就您的问题而言,最好的选择是将带有颜色的 JSON 作为 JSON 数组提交,如下所示:

{
"hello": "baby",
"eyes": [
"blue",
"green",
]
}

否则,您可能需要让您的 Whatever 类在带有 String 参数的 setEyes 方法上使用 @JsonSetter 注释,在该方法中解析字符串自己手动创建颜色列表。

@JsonSetter
public void setEyes(final String eyes) {
// Parse string and set field here
}

关于java - 从 POJO 数组成员的字符串表示形式反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34969667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com