【问题标题】:How to evolve a Spring Data REST application?如何发展 Spring Data REST 应用程序?
【发布时间】:2015-06-02 16:09:11
【问题描述】:

我一直在搞乱 Spring Data REST,这是个好东西。我喜欢 HATEOAS 集成和 ALP。很明显,它可以通过默认或少量配置解决许多用例。

我的担忧是:

  • 如果我的业务规则在控制器中变得更加复杂,如何改进它?

  • 有没有办法覆盖默认控制器以包含资源的特定代码?

【问题讨论】:

    标签: rest spring-data spring-data-rest


    【解决方案1】:

    解决上述挑战可能有两个方面很有趣。

    使用事件监听器

    如果您只想拦截支持公开资源的 CRUD 操作,您可以实现 AbstractRepositoryEventListener。它允许您同步拦截 Spring Data REST 控制器对实体施加的操作。这里提到的用例可以是额外的验证、日志记录、过滤等。

    制作您自己的控制器类

    另一种自定义请求触发的功能的方法是使用手动实现的控制器覆盖特定的请求映射。这可用于使用新功能增加资源(例如,通过produces 属性公开新媒体类型)或通过简单地在控制器方法上声明匹配请求映射来完全替换功能。

    其他方面

    通常标准资源模型不足以表达领域逻辑,或者可能不适合。然后,用户通常会制作自己的控制器,它们基本上会融入 Spring Data REST 公开的资源的关系空间中。

    为了整合这两个世界,ResourceProcessor 可用于添加指向表示的链接,以将客户端指向手动实现的功能。

    有关示例,请参阅the Spring RESTBucks project。订单的核心生命周期由 Spring Data REST 处理。但是,订单的核心状态转换是触发支付,这在单独的PaymentController 中实现。然后使用PaymentOrderResourceProcessor 在订单资源中宣传支付功能。

    【讨论】:

    • 谢谢。我想覆盖一些请求映射但不破坏 HAL 和 ALPS。我想我应该在重写的控制器中使用 Spring HATEOAS 方式实现 HAL,但是......我有什么特别需要考虑的与 ALPS 相关的吗?
    猜你喜欢
    • 2014-05-02
    • 1970-01-01
    • 2018-08-02
    • 2023-03-09
    • 2018-07-23
    • 1970-01-01
    • 2016-01-21
    • 2017-03-15
    • 2016-10-26
    相关资源
    最近更新 更多