我有一个带有内部 map 的 POJO。我希望将其从 JSON 反序列化为 HashMap,但 Jackson 将内部映射从 JSON 反序列化为 LinkedHashMap。我可以通过将Map的类型从“Map”更改为“HashMap”来强制它使用HashMap,但我想知道是否有办法告诉Jackson反序列化为Map的特定实现?
这是 JSON:
{
"transforms": {
"variable_name1": [{
"min": 100,
"max": 200,
"value": 0.6
}],
"variable_name2": [{
"min": 100,
"max": 200,
"value": 0.6
}],
"variable_name3": [{
"min": 100,
"max": 200,
"value": 0.6
}]
}
}
以及 Transforms 类:
public class Transformer {
Map<String, List<Transform>> transforms;
public Transformer() {
transforms = new HashMap<String, List<Transform>>();
}
public void setTransforms(Map<String, List<Transform>> transforms) {
this.transforms = transforms;
}
}
我如何使用 ObjectMapper:
try(Reader reader = new InputStreamReader(TransformTester.class.getResourceAsStream("transforms.json"), "UTF-8")) {
ObjectMapper objMapper = new ObjectMapper();
Transformer tr = objMapper.readValue(reader, Transformer.class);
}
最佳答案
如果您想要其他类型,您可以实现 Jackson 转换器并用它注释您的类。
public static class TransformConverter implements Converter<Map<String,List>,Map<String,List>>{
@Override
public Map<String,List> convert(Map<String,List> map) {
return new HashMap<>(map);
}
@Override
public JavaType getInputType(TypeFactory typeFactory) {
return typeFactory.constructMapType(Map.class, String.class, List.class);
}
@Override
public JavaType getOutputType(TypeFactory typeFactory) {
return typeFactory.constructMapType(Map.class, String.class, List.class);
}
}
public static class Transformer {
@JsonDeserialize(converter = TransformConverter.class)
Map<String, List<Transform>> transforms;
//rest of your class
}
关于java - Jackson JSON objectmapper 反序列化为 LinkedHashMap 而不是 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41305787/