是否可以编写返回泛型类型集合的Web服务?春天3

时间:2012-02-07 12:47:16

标签: java web-services spring generics

在我的数据库中,我有许多实体类,我通过Hibernate对它们运行标准的CRUD操作。创建泛型dao类以使用类进行所有主要操作不是问题。例如,在dao中我有类似这样的方法:

<T> List<T> loadAll(Class clazz)

现在我想通过Spring 3运营的Web服务将这些方法公开给Web服务客户端。

我看到的唯一方法是为所有实体实现web方法,即编写一个看起来像......的类

class BookResponse { List<BookEntity> books; }

...并在相应的Web方法“BookResponse getAllBooks()”中返回。这将破坏我的注意力,通过使用带有泛型的dao来简化代码。

还有其他方法吗? 如果不为所有实体实现Web方法,我该怎么做? 如果无法使用通用Web服务,可能还有其他方法可以通过简单的方式解决此任务吗?

更新: 目前我正在尝试实现一个看起来像

的响应类
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 个答案:

答案 0 :(得分:0)

我认为你需要一个新的POJO“GenericEntity”,它可以保存任何域实体类实例的信息。
它将包含一个类型字符串和一个任意/通用的命名属性列表 然后,它可以用于表示您的任何真实域实体

e.g。
  type =书
  attributes =(title =凤凰社,作者= J K罗琳)

e.g。
  type = Car
  attributes =(make = Renault,model = Clio)

这些示例显示了String属性,因此您必须对其进行排序,如果这样做足够好或者您需要强类型 - 这可能会更难。

然后,您可以通过Web服务公开您的“GenericEntity”,允许客户进行呼叫并指定他们希望搜索的域实体,甚至允许他们指定搜索条件。 添加和删​​除可以以类似的方式完成。

HTH,

大卫