我正在使用Spring MVC开发一个小型RESTful应用程序,我想在通用控制器,服务和实体中实现通用CRUD。我有一个实体Person
和2个实体,它们继承了此实体的字段(例如Person1
和Person2
)。
最好的方法是什么?
我看到了一个所有控制器都是最终控制器的例子。拥有通用控制器是不好的做法?服务怎么样?如何制作通用实体?
答案 0 :(得分:2)
我已经开发出类似这样的东西,用抽象方法
制作通用的Controller抽象protected abstract RestService<T, ID> getService();
和其他控制器必须扩展此控制器并实现此方法,我也使用抽象方法
进行相同的操作protected abstract PagingAndSortingRepository<T, ID> getRepo();
要获取存储库以在抽象服务中使用它,您必须注意这些抽象类没有@Controller或@Service,同样在Controller的子类中,您必须将根路径指定为:
@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) {
如果您对此解决方案感兴趣,我可以与您共享源代码
答案 1 :(得分:1)
不,我不认为控制器不是最终的不良做法。事实上,我从来没有写过最终的Spring MVC控制器,虽然我可以看到它的吸引力。
对于“通用”控制器,没有什么可以阻止您创建基类控制器。控制器只是一个POJO,因此非常简单。
更好的是,如果你想获得最大的收益,为什么不使用Spring Roo?它下面的所有Spring MVC都会生成您的样板代码,当您使用它来完成创建站点的所有繁琐工作时,您可以简单地将所有roo生成的代码推送到您自己的代码中并将其抛到一边如果你不再需要了它。