java是否可以编写返回泛型类型集合的webservice?春天3
在我的数据库中,我有许多实体类,我通过Hibernate对它们运行standart CRUD操作。创建泛型dao类以使用类进行所有主要操作不是问题。例如,在dao中,我有如下方法:
<T> List<T> loadAll(Class clazz)
现在我想通过Spring3操作的web服务向web服务客户机公开这些方法
我看到的唯一方法是为所有实体实现web方法,即编写一个看起来像
class BookResponse { List<BookEntity> books; }
。。。并在相应的web方法“BookResponse getAllBooks()”中返回。这将破坏我通过使用dao和泛型使代码更简单的尝试
还有别的办法吗? 如果不为我的所有实体实现web方法,我如何做到这一点? 如果无法使用通用web服务,是否有其他方法可以简单地解决此任务
更新: 目前,我正在尝试实现一个response类,它应该如下所示
public class ServiceResponse<T>{
@XmlElementWrapper( name = "data" )
@XmlElements( @XmlElement(name = "a", type = EntityA.class), @XmlElement(name = "b", type = EntityB.class) )
private List<T> data = new ArrayList<T>( );
//getters,setters
}
因此,我希望能够插入任何实体的列表,这些实体通过注释映射到此响应。这不会产生错误,但web服务给我的响应是空的
# 1 楼答案
我认为您需要一个新的POJO“GenericEntity”,它可以保存任何域实体类实例的信息
它将保存一个类型字符串和一个任意/通用的命名属性列表
然后,它可以用来表示任何真实的域实体
例如
类型=书本
属性=(标题=凤凰社,作者=J K罗琳)
例如
类型=汽车
属性=(make=Renault,model=Clio)
这些例子展示了字符串属性,所以你必须弄清楚这是否足够好,或者你是否需要强类型输入——这是可能的,但更难
然后,您可以通过web服务公开您的“GenericEntity”,允许客户端进行调用,并指定他们希望搜索的域实体,甚至允许他们指定搜索条件。 添加和删除也可以用类似的方式完成
嗯
大卫