Dropwizard从Jersey客户端反序列化通用列表

Dropwizard从Jersey客户端反序列化通用列表,jersey,jackson,dropwizard,Jersey,Jackson,Dropwizard,我想实现一个泛型类,用于在本地MongoDB实例中缓存RESTAPI的结果。要使其工作,我需要反序列化从JerseyClient获得的集合: Response response = this.source.request().get(); List<T> list = response.readEntity( new GenericType<List<T>>() {} ); // ... do stuff with the list 相反,它可以直接工作,

我想实现一个泛型类,用于在本地MongoDB实例中缓存RESTAPI的结果。要使其工作,我需要反序列化从JerseyClient获得的集合:

Response response = this.source.request().get();
List<T> list = response.readEntity( new GenericType<List<T>>() {} );

// ... do stuff with the list

相反,它可以直接工作,但我真的需要通用的存在

Java最流行的泛型借口:类型擦除

如果您可以将类类型作为
类clazz
传递,则可以使用以下方法:

GenericType<List<T>> genericType = new GenericType<>(new ParameterizedType() {
  public Type[] getActualTypeArguments() {
    return new Type[]{clazz};
  }

  public Type getRawType() {
    return List.class;
  }

  public Type getOwnerType() {
    return null;
  }
});
response.readEntity(genericType);
GenericType GenericType=新的GenericType(新的参数化类型(){
公共类型[]getActualTypeArguments(){
返回新类型[]{clazz};
}
公共类型getRawType(){
返回列表.class;
}
公共类型getOwnerType(){
返回null;
}
});
response.readEntity(genericType);
您可以使用

import sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl;
import javax.ws.rs.core.GenericType;

 GenericType<List<T>> genericType = new GenericType<>( 
        ParameterizedTypeImpl.make( List.class, new Type[]{classType}, null));
导入sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl;
导入javax.ws.rs.core.GenericType;
GenericType GenericType=新的GenericType(
ParameteredTypeImpl.make(List.class,新类型[]{classType},null));

下面的答案是可行的,但您是否能够使用更简单的方法来实现这一点?对于像我这样努力解决这个问题的人,请不要忘记,您也可以简单地将实体作为数组读取,然后用列表将其包装起来:
readEntity(Foo[].class)
。在考虑这个XD
getOwnerType
应该返回
null
之前,我尴尬地花了几个小时进行调试,正如在文档中所写的那样
返回一个{@code Type}对象,该对象表示该类型所属的类型。例如,如果此类型为{@code O.I},则返回{@code O}的表示。
感谢您提供的解决方案。即使使用此类型,仍然会得到一个
列表
,令人非常沮丧。
import sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl;
import javax.ws.rs.core.GenericType;

 GenericType<List<T>> genericType = new GenericType<>( 
        ParameterizedTypeImpl.make( List.class, new Type[]{classType}, null));