我的问题是我有一个带有嵌套对象的json字符串,杰克逊在反序列化它们时使用LinkedHashMap
。您如何配置Jackson,以便在构造对象时更喜欢使用HashMap
类型?
mapper.readValue("{\"a\":\"b\":\"nes\"}", Map.class)
答案 0 :(得分:0)
AFAIK,没有配置。但是,您可以为Map.class
编写自定义反序列化器。像这样的东西:
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addDeserializer(Map.class, new JsonDeserializer<Map<?,?>>() {
@Override
public Map<?,?> deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
return jsonParser.getCodec()
.readValue(jsonParser, HashMap.class);
}
});
mapper.registerModule(module);
final Map<?, ?> map = mapper.readValue("{\"a\": {\"b\":1}}", Map.class);
assertEquals(HashMap.class, map.get("a").getClass());
我认为它不会像您希望的那样起作用,但是,也许它将对您的研究有所帮助。