gpt4 book ai didi

java - Jackson - @JsonValue 注释字段无法反序列化

转载 作者:行者123 更新时间:2023-11-30 05:29:16 24 4
gpt4 key购买 nike

我有这两门课:

Foo.java

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Foo {

private ListWrapper data;

}

ListWrapper.java

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ListWrapper {

@JsonValue
private List<String> value;

}

我使用以下方法来测试序列化:

public void testSerialization() throws JsonProcessingException {
Foo foo = new Foo();
foo.setData(new ListWrapper(new ArrayList<String>() {
{
add("foo");
add("bar");
}
}));
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writeValueAsString(foo));
}

输出为{"data":["foo","bar"]}。现在我尝试使用以下方法反序列化这个 json 字符串:

public void testDeserialization() throws IOException {
String json = "{\"data\":[\"foo\",\"bar\"]}";
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.readValue(json, Foo.class));
}

但这不起作用。我收到以下异常:

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `ListWrapper` out of START_ARRAY token
at [Source: (String)"{"data":["foo","bar"]}"; line: 1, column: 9] (through reference chain: Foo["data"])

我不知道为什么会发生这种情况。谁能给我提示吗?我正在使用 Jackson 2.9.9。

最佳答案

Jackson 对象映射器抛出异常,因为它期望 data 属性为 Object 类型,但却找到了 Array

@JsonValue 注释用于编码。用于解码的类似注释是 @JsonCreator

注释您的 ListWrapper 构造函数

@JsonCreator
public ListWrapper(List<String> value) {
this.value = value;
}

关于java - Jackson - @JsonValue 注释字段无法反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57896888/

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