代码之家  ›  专栏  ›  技术社区  ›  queeg

Jackson使用t bean列表解析bean<t>

  •  0
  • queeg  · 技术社区  · 11 月前

    为了解析一些webservice结果,我有一个java bean,Jackson可以这样解析:

    ObjectMapper mapper = new ObjectMapper();
    mapper.readValue(in, ResultPage.class);
    

    现在,在我的ResultPage中,除了其他数据外,我还有一个结果列表(我想要的有效载荷)。根据提供结果的查询,列出的文档类型可能会有所不同(文档、标签、关键字等),但一般列表格式不变。因此,我将ResultPage bean设置为泛型类型,其中包含如下结果列表:

    public class ResultPage<T> {
        ...
        private List<T> results;
        ...
    }
    

    下一步,在提供此类型时,我必须调用解析器,我对此感到困惑

    public <T> ResultPage<T> parseResultPage(InputStream in, Class<T> valueType) throws IOException {
        return mapper.readValue(in, ResultPage<valueType>.class);
    }
    

    此外,这(看似更简单的尝试)对我来说也无法编译:

    ResultPage<Tag> rp = mapper.readValue(responseEntity.getContent(), ResultPage<Tag>.class);
    

    我怎么能让这样的设置工作?

    1 回复  |  直到 11 月前
        1
  •  0
  •   June    11 月前

    使用 TypeReference :

    public <T> ResultPage<T> parseResultPage(String content, Class<T> resultType) throws IOException {
        TypeReference<ResultPage<T>> typeRef = new TypeReference<>() {};
        return new ObjectMapper().readValue(in, typeRef);
    }