从 SAP Commerce Cloud 中的 commercewebservices 自定义控制器

问题描述

据我所知,从 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 模式

解决方法

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

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

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

Overriding the REST API [help.sap.com]

编辑

我们不要忘记:
无论如何,所有操作都发生在外观中,您还可以使用 WsDTO 概念和额外的转换器扩展 API 响应,而无需覆盖控制器。 (有关详细信息,请参阅 Extending Data Objects[help.sap.com]

,

感谢您的回复。

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

  1. 引入一个新的名为 MyController 的扩展 CartsController
  2. 覆盖单个方法并使用 RequestMappingOverride 注释此方法
  3. 启动系统我现在得到了 CartsController 的所有映射上的不明确映射,我没有覆盖这些映射

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