我一直在搞乱Spring Data REST,这是件好事。我喜欢HATEOAS集成和ALP。很明显,它可以默认解决许多用例,也可以很少配置。
我担心的是:
如果我的业务规则在控制器中变得更复杂,如何进行演变?
有没有办法覆盖默认控制器以包含资源的特定代码?
答案 0 :(得分:3)
有两个方面可能有助于解决所概述的挑战。
如果您要做的就是拦截支持公开资源的CRUD操作,您可以实现AbstractRepositoryEventListener
。它允许您同步拦截Spring Data REST控制器对实体施加的操作。这里要提到的用例可以是额外的验证,记录,过滤等。
自定义请求触发的功能的另一种方法是通过使用手动实现的控制器覆盖特定请求映射。这可用于使用新功能扩充资源(例如,通过produces
属性公开新媒体类型)或通过简单地声明控制器方法上的匹配请求映射来完全替换功能。
标准资源模型通常不足以表达域逻辑或可能不适合。然后,用户通常会创建自己的控制器,它们基本上融合到Spring Data REST公开的资源的关系空间中。
要集成两个世界,ResourceProcessor
可用于添加表示链接,以指向客户端手动实现的功能。
有关示例,请参阅the Spring RESTBucks project。订单的核心生命周期由Spring Data REST处理。但是,订单的核心状态转换是触发付款,该付款在单独的PaymentController
中实施。然后使用PaymentOrderResourceProcessor
在订单资源中公布支付功能。