【问题标题】:Customize Controller from commercewebservices in SAP Commerce Cloud从 SAP Commerce Cloud 中的 commercewebservices 自定义控制器
【发布时间】:2021-04-15 21:44:27
【问题描述】:

据我了解,从 SAP Commerce Cloud 2005 开始,在 SAP Commerce Cloud for Spartacus 中自定义 REST 端点的方法是使用 commercewebservices(非模板),然后在您的 REST 端点中添加自己的 occ 扩展。

这适用于新端点,但如果我想从 commercewebservices 中自定义现有控制器怎么办?由于我不再使用模板,因此无法再修改 commercewebservices。例如,我看不出如何自定义 de.hybris.platform.commercewebservices.core.v2.controller.CartsController。

使用从模板生成的您自己的扩展替换 commercewebservices 不起作用,因为多个 OOTB(例如 cmsocc)扩展依赖于 commercewebservices,因此它总是会被加载并与我们自己从 commercewebservices 派生的扩展发生冲突。

使用 addOn 自定义 commercewebservices 也不能解决问题,因为据我了解,无法添加您自己的控制器并将其绑定到 commercewebservices 中的控制器已使用的 url 模式

【问题讨论】:

    标签: hybris spartacus-storefront


    【解决方案1】:

    如果您想覆盖现有的 API 端点(在我们的例子中为 CartsController),您可以使用 @RequestMappingOverride 注释来实现。

    使用此注释,您可以在您自己的 OCC 扩展中使用您的自定义控制器“隐藏”现成控制器的现有请求映射。

    您可以在此处找到更多详细信息和示例:

    Overriding the REST API [help.sap.com]

    编辑

    别忘了:
    无论如何,所有操作都发生在外观中,您还可以扩展 API 响应,而无需使用 WsDTO 概念和其他转换器覆盖控制器。 (详情请见Extending Data Objects[help.sap.com]

    【讨论】:

      【解决方案2】:

      感谢您的回复。

      注解 RequestMappingOverride 工作正常。这种方法存在一个问题,假设我执行以下操作:

      1. 引入一个新的 MyController 扩展 CartsController
      2. 覆盖单个方法并使用 RequestMappingOverride 注释此方法
      3. 启动系统时,我现在确实在 CartsController 的所有映射上得到了模棱两可的映射,但我没有覆盖

      原因是,我现在有两个使用相同映射注册的控制器。 CartsController 和 MyController 继承了所有未从 CartsController 覆盖的方法。我找到的唯一解决方案是覆盖 CartsController 的每个方法,使用 RequestMappingOverride 注释所有方法,然后进行超级调用。这有点笨拙,并导致大量样板代码。我希望注释 RequestMappingOverride 可以在类级别而不是仅在方法级别上工作

      【讨论】:

      • 是的,这有点棘手。不过,我不会扩展 ootb 控制器。组合优于继承...
      猜你喜欢
      • 2022-06-22
      • 1970-01-01
      • 2022-06-13
      • 2022-12-17
      • 1970-01-01
      • 2022-11-21
      • 1970-01-01
      • 2022-06-22
      • 2016-09-27
      相关资源
      最近更新 更多