Jackson 通用 json 到 List<T> 转换器方法不起作用

Jackson generic json to List<T> converter method does not work

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());

但是没用。

因为你有元素 class 你可能想像这样使用你的映射器的 TypeFactory:

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

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