Java RESTEasy代理与泛型接口
我有一个关于我正在使用的REST客户端的问题,但首先我将解释该服务: 我有一个界面:Java RESTEasy代理与泛型接口,java,resteasy,Java,Resteasy,我有一个关于我正在使用的REST客户端的问题,但首先我将解释该服务: 我有一个界面: public interface IEntityResource<T extends BaseEntity>{ public List<T> findAll(); } 公共接口IEntityResource{ 公共列表findAll(); } 我有一个REST提供程序可以执行以下操作: @Path("system") public class System
public interface IEntityResource<T extends BaseEntity>{
public List<T> findAll();
}
公共接口IEntityResource{
公共列表findAll();
}
我有一个REST提供程序可以执行以下操作:
@Path("system")
public class SystemResource extends AbstractEntityResource<PITSystem>{
// Some stuff here
}
@Override
public List<T> findAll() {
L.error("Returning all");
for(T entity : getEntityDao().findAll()){
L.error("Returning class: " + entity.getClass());
}
return getEntityDao().findAll();
}
路径(“系统”)
公共类SystemResource扩展了AbstractEntityResource{
//这里有些东西
}
我的AbstractEntityResource执行以下操作:
@Path("system")
public class SystemResource extends AbstractEntityResource<PITSystem>{
// Some stuff here
}
@Override
public List<T> findAll() {
L.error("Returning all");
for(T entity : getEntityDao().findAll()){
L.error("Returning class: " + entity.getClass());
}
return getEntityDao().findAll();
}
@覆盖
公共列表findAll(){
L.错误(“全部返回”);
对于(T实体:getEntityDao().findAll()){
L.error(“返回类:+entity.getClass());
}
返回getEntityDao().findAll();
}
所有这些都非常有效,并且具有100%的测试覆盖率。当我部署它时,我可以添加实体,这没有问题
我的客户看起来像这样:
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
interface PITSystemInterface extends IEntityResource<PITSystem>{}
public class ProxyClientExample {
public static void main(String ar[]) throws Exception{
ProxyClientExample pce = new ProxyClientExample();
ResteasyClient client = new ResteasyClientBuilder().build();
WebTarget target = client.target("http://mike:mike@localhost:8080/pit-beta1/rest/v1/system");
ResteasyWebTarget rtarget = (ResteasyWebTarget) target;
PITSystemInterface simple = rtarget.proxy(PITSystemInterface.class);
PITSystem s = new PITSystem();
s.setName("Test " + new java.util.Date().getTime());
s.setDescription("Created: " + new java.util.Date().getTime());
simple.create(s);
System.err.println(simple.getStatus());
for(PITSystem system : simple.findAll()){
System.err.println(system);
}
}
}
@使用(MediaType.APPLICATION\u JSON)
@产生(MediaType.APPLICATION_JSON)
接口PITSystemInterface扩展了IEntityResource{}
公共类ProxyClientExample{
公共静态void main(字符串ar[])引发异常{
ProxyClientExample pce=新的ProxyClientExample();
ResteasyClient客户端=新的ResteasyClientBuilder().build();
WebTarget=client.target(“http://mike:mike@本地主机:8080/pit-beta1/rest/v1/system);
ResteasyWebTarget rtarget=(ResteasyWebTarget)目标;
PITSystemInterface simple=rtarget.proxy(PITSystemInterface.class);
PITSystem=新PITSystem();
s、 setName(“Test”+new java.util.Date().getTime());
s、 setDescription(“创建:+new java.util.Date().getTime());
简单。创建(s);
System.err.println(simple.getStatus());
for(PITSystem:simple.findAll()){
System.err.println(系统);
}
}
}
问题是底部的for循环给了我一个异常:
线程“main”java.lang.ClassCastException中的异常:无法将BaseEntity转换为PITSystem
如果我将for循环更改为BaseEntity
,它会工作。我的服务器日志消息显示:
返校班:班级制
返校班:班级制
返校班:班级制
出于某种原因,RESTEasy客户端似乎认为它是BaseEntity,但事实并非如此。你知道为什么吗