我正在使用 Spring MVC 开发一个小型 RESTful 应用程序,我想在通用控制器、服务和实体中实现通用 CRUD。我有一个实体Person
和 2 个从该实体继承字段的实体(例如Person1
和Person2
)。
最好的方法是什么?
我看到了一个示例,其中所有控制器都是最终的。拥有通用控制器是一种不好的做法吗?服务呢?如何制作通用实体?
我正在使用 Spring MVC 开发一个小型 RESTful 应用程序,我想在通用控制器、服务和实体中实现通用 CRUD。我有一个实体Person
和 2 个从该实体继承字段的实体(例如Person1
和Person2
)。
最好的方法是什么?
我看到了一个示例,其中所有控制器都是最终的。拥有通用控制器是一种不好的做法吗?服务呢?如何制作通用实体?
我已经开发了类似的东西,使通用控制器抽象为抽象方法
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) {
如果您对此解决方案感兴趣,我可以与您分享源代码
不,我认为让控制器不是最终的并不是坏习惯。事实上,我从未编写过最终的 Spring MVC 控制器,尽管我可以看到这样做的吸引力。
至于“通用”控制器,没有什么能阻止您创建基类控制器。Controller 只是一个 POJO,所以它非常简单。
更好的是,如果您想获得最大的收益,为什么不使用 Spring Roo?它下面的所有 Spring MVC 都会生成您的样板代码,当您完成使用它来完成创建站点的所有繁重工作时,您可以简单地将所有 roo 生成的代码推入您自己的代码中,然后将其扔到一边你不再需要它了。