这是我的第一个处理类型映射的titme,每次我尝试将节点映射到我的实际类型对象,其中自定义属性键为具有Set<Integer>值的FooType .这是我的对象的样子
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;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我每次尝试使用mapper读取值: -
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]}}
Run Code Online (Sandbox Code Playgroud)
由于我们没有你要反序列化的Json结构,所以有点难以帮助你,但问题是杰克逊在将它用作地图键时不知道如何反序列化你的类.所有信息杰克逊都是一个简单的字符串,而你的类无法用一个字符串创建它.
有3种方法可以达到这个目的:
KeyDeserializer并使用该foos字段注释@JsonDeserialize(keyUsing=YourDeserializer.class)恕我直言静态工厂方法是更清洁的方式.
| 归档时间: |
|
| 查看次数: |
6040 次 |
| 最近记录: |