gpt4 book ai didi

java - Json Jackson Mapper 通用 map 类型问题

转载 作者:行者123 更新时间:2023-12-02 06:04:53 26 4
gpt4 key购买 nike

这是我第一次处理类型映射,每次我尝试将节点映射到我的实际类型对象时,该对象的自定义属性键为 FooType 和 Set<Integer>值。这是我的对象的样子

public class Foo {
private String some;
Map<FooTypes,Set<Integer>> foos;

public Map<FooTypes, Set<Integer>> getFoos() {
return foos;
}
public void setFoos(Map<FooTypes, Set<Integer>> map) {
this.foos = map;
}
public String getSome() {
return some;
}
public void setSome(String some) {
this.some = some;
}
}

public class FooTypes {
private String name;
private String id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}

现在每次我尝试使用映射器读取值时:-

List <Foo> response = mapper.readValue("/home/foo/foo.json",List.class);

我收到一条错误消息:-

Can not find a (Map) Key deserializer for type [simple type, class cruft.FooTypes]

有人可以告诉我如何解决这个问题吗?谢谢。

Json 输出:-

{"foos":{"FooTypes [id=1, name=Test Foo]":[1,2,3]},"some":hello},{"foos":{"FooTypes [id=2, name=Another foo]":[5,6,7]}}

最佳答案

因为我们没有你想要反序列化的 Json 结构,所以有点难以帮助你,但这里的问题是 Jackson 不知道如何反序列化你的类当它用作映射键时 。 Jackson as 的所有信息都是一个简单的字符串,您的类无法提供仅使用一个字符串来创建它的方法。

有 3 种方法可以实现:

  1. 将单个字符串参数构造函数添加到您的 FooType 类
  2. 添加单个字符串参数工厂方法(静态)并用@JsonCreator 注释
  3. 使用自定义 KeyDeserializer并注释 foos字段 @JsonDeserialize(keyUsing=YourDeserializer.class)

恕我直言,静态工厂方法是更简洁的方法。

关于java - Json Jackson Mapper 通用 map 类型问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12190966/

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