2013-02-22 204 views
0

我正在开发一个使用Spring MVC的小型RESTful应用程序,我想在通用控制器,服务和实体中实现通用CRUD。我有一个实体Person和两个实体,它们继承了来自此实体的字段(例如Person1Person2)。spring mvc通用控制器和服务

什么是最好的方法来做到这一点?

我看到一个例子,所有控制器都是最终的。拥有通用控制器是不好的做法吗?服务怎么样?我如何制作一个通用的实体?

回答

1

不,我认为不好的做法是让控制器不是最终的。事实上,我从来没有写过一个最终的Spring MVC控制器,尽管我可以看到它的吸引力。

至于“通用”控制器,没有什么能够阻止你创建一个基类控制器。控制器只是一个POJO,所以它会非常直截了当。

更好的是,如果你想得到最大的回报,为什么不使用Spring Roo?它的下面所有的Spring MVC都会生成你的锅炉代码,当你完成了使用它来完成所有创建站点的繁琐工作时,你可以简单地将所有roo生成的代码放到你自己的代码中,然后抛弃你不再需要它了。

+0

感谢共享源代码的响应。我尝试过使用Spring ROO,它看起来非常好,但我不喜欢jspx + dojo的组合,并且这些方面也很烦人。我最终放弃了它并自己创建了实体。 – adrian 2013-02-25 19:14:31

+0

我也不喜欢Dojo,当我为项目使用Roo时,我通常会用jQuery替换它。我主要使用Roo来生成实体和基本控制器的锅炉板代码并获得Spring Security设置。我通常不会用它来支撑我的实体。 – CodeChimp 2013-04-23 11:18:46

2

我已经开发了这样的事情使通用控制器抽象的一个抽象的方法

protected abstract RestService<T, ID> getService(); 

和其他控制器必须扩展该控制器还实现这个方法我为服务相同的抽象方法

protected abstract PagingAndSortingRepository<T, ID> getRepo(); 

要让存储库在抽象服务中使用它,必须注意这些抽象类没有@Controller或@Service,在Controller的子类中也必须指定r OOT路径为:

@Controller 
@RequestMapping("/customer") 
public class CustomerRestController extends RestController<Customer, Long> { 

和抽象的控制器,你必须使用像相对路径:

@RequestMapping(value = "/{id}", method = RequestMethod.PUT) 
@ResponseBody 
public ResponseEntity<String> update(@PathVariable ID id, 
    @RequestBody T t) { 

,如果你有兴趣在此解决方案,我可以和你

+0

@bassemZohdy你有密码吗? – 2017-07-25 12:06:58