gpt4 book ai didi

java - Jackson 通用 json 到 List 转换器方法不起作用

转载 作者:行者123 更新时间:2023-11-29 07:41:52 25 4
gpt4 key购买 nike

public static <T> List<T> convertJSONStringTOListOfT(String jsonString, Class<T> t){
if(jsonString == null){
return null;
}
ObjectMapper mapper = new ObjectMapper();
try
{
List<T> list = mapper.readValue(jsonString, new TypeReference<List<T>>() {});
return list;
} catch (JsonGenerationException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}

我有上面的方法,当我尝试使用以下方法调用它时:

list = convertJSONStringTOListOfT(str, CustomAssessmentQuestionSetItem.class);

返回的列表是List<LinkedHashMap>不是List<CustomAssessmentQuestionSetItem>

虽然如果我不使用泛型那么下面的代码工作正常:

list = mapper.readValue(str, new TypeReference<List<CustomAssessmentQuestionSetItem>>() {});

这两个调用在我看来是一样的。无法理解为什么通用的正在创建 List<LinkedHashMap>而不是 List<CustomAssessmentQuestionSetItem>

仅供引用:我也尝试将方法签名更改为

public static <T> List<T> convertJSONStringTOListOfT(String jsonString, T t)

和对

的相应调用
list = convertJSONStringTOListOfT(str,new CustomAssessmentQuestionSetItem());

但是没有用。

最佳答案

由于您拥有元素类,您可能希望像这样使用映射器的 TypeFactory:

final TypeFactory factory = mapper.getTypeFactory();
final JavaType listOfT = factory.constructCollectionType(List.class, t);

然后使用 listOfT 作为 .readValue() 的第二个参数。

关于java - Jackson 通用 json 到 List<T> 转换器方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29242530/

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