我有这个json:
{
"List": [
{
"Field1": 1678493915,
"Field2": "A string"
}
]
}
当我在helper类中定义这个方法时:
public static Map<String, List<Map<String, String>>> readJSON(String json) throws JsonProcessingException {
return new ObjectMapper().readValue(json, new TypeReference<>() {});
}
字段Field1
被解析为我想要的String。但是我想让这个方法足够通用,以便在其他地方使用,所以我在helper类中编写了这个方法:
public static <T> T readJSON2(String json) throws JsonProcessingException {
return new ObjectMapper().readValue(json, new TypeReference<>(){});
}
我打电话给他:
Map<String, List<Map<String, String>>> data = readJSON2(jsonString);
不幸的是,在这种情况下,Field1
被解析为Integer。
我可以在helper类中执行以下操作:
public static <T> T readJSON3(String json, TypeReference<T> typeReference) throws JsonProcessingException {
return new ObjectMapper().readValue(json, typeReference);
}
并以这种方式调用它:
Map<String, List<Map<String, String>>> data = readJSON3(jsonString, new TypeReference<>(){});
这是可行的(Field1
被解析为String),但我真的想把所有Jackson的东西都封装在helper类中,比如TypeReference。这就是说,我不想让调用者使用TypeReference。你有什么想法吗?
先谢谢你了。
2条答案
按热度按时间ncecgwcz1#
阅读文章:https://www.baeldung.com/jackson-linkedhashmap-cannot-be-cast(第6段)。由于运行时的性质,使用泛型类型有限制。
如我所见,您可以使用以下解决方案:
qkf9rpyu2#
如果你想要不使用TypeReference的简单方法,可以考虑使用
mapper.readTree(json)
。输出将是: