Java 如何使用Jackson';是泛型的TypeReference吗?

Java 如何使用Jackson';是泛型的TypeReference吗?,java,json,generics,jackson,mapping,Java,Json,Generics,Jackson,Mapping,对于json映射,我使用以下方法: public static <T> T mapJsonToObject(String json, T dtoClass) throws Exception { ObjectMapper mapper = new ObjectMapper(); return mapper.readValue(json, new TypeReference<RestResponse<UserDto>>() { }); }

对于json映射,我使用以下方法:

public static <T> T mapJsonToObject(String json, T dtoClass) throws Exception {
    ObjectMapper mapper = new ObjectMapper();
    return mapper.readValue(json, new TypeReference<RestResponse<UserDto>>() {
    });
}
publicstatictmapjsontoobject(stringjson,tdtoclass)抛出异常{
ObjectMapper mapper=新的ObjectMapper();
返回mapper.readValue(json,newTypeReference(){
});
}
UserDto看起来是这样的:

@JsonIgnoreProperties(ignoreUnknown = true)
public class UserDto {

    @JsonProperty("items")
    private List<User> userList;

    public List<User> getUserList() {
        return userList;
    }

    public void setUserList(List<User> userList) {
        this.userList = userList;
    }
}
@JsonIgnoreProperties(ignoreUnknown=true)
公共类UserDto{
@JsonProperty(“项目”)
私有列表用户列表;
公共列表getUserList(){
返回用户列表;
}
public void setUserList(List userList){
this.userList=userList;
}
}
我想改进这种映射方法,而不必附加到UserDto类,并用泛型替换它

可能吗?怎么做


谢谢。

TypeReference
要求您静态地指定参数,而不是动态地指定参数,因此如果您需要进一步参数化类型,它将不起作用


我认为您需要的是
JavaType
:您可以使用
TypeFactory
动态构建实例。您可以通过
ObjectMapper.getTypeFactory()
获得
TypeFactory
的实例。您还可以从simple
Class
以及
TypeReference

构建
JavaType
实例,其中一种方法是定义JacksonJavaType,表示clazz类型的项列表。您仍然需要在运行时访问泛型参数的类。通常的方法是

<T> class XX { XX(Class<T> clazz, ...) ... } 

我希望这有帮助。我在自己的代码中使用了这种方法。

@Dici我想将一个泛型类作为参数传递给该方法,并调用TypeReference,如下所示:
new TypeReference()
您的问题与Jackson差不多,除了Gson之外。答案是一样的,您只需要调整库API。是的,这是。简而言之:类型擦除使得在Java中不可能做到这一点。但是我发现你可以在科特林。另见:
JavaType itemType = mapper.getTypeFactory().constructCollectionType(List.class, clazz);