在插件中自定义Hybris加速器店面控制器

时间:2018-11-27 18:01:09

标签: spring-mvc hybris

我正在使用 Hybris 6.3 ,并且希望遵循使用附加组件自定义加速器店面控制器的最佳实践。这样做是为了使升级到新店面更加容易。

例如,加速器定义了类似于以下内容的Minicart控制器

package com.custom.storefront.controllers.misc;

@Controller
public class MiniCartController extends AbstractController
{
    @RequestMapping(value = "/cart/miniCart/{totalDisplay:.*}", method = RequestMethod.GET)
    public String getMiniCart(@PathVariable final String totalDisplay, final Model model)
    {
        //default functionality
    }
}

在我的插件中,我想将相同的URL模式映射到将覆盖该功能的新控制器。

package com.custom.storefrontaddon.controllers.misc;

@Controller
public class MyCustomMiniCartController extends AbstractController
{
    @RequestMapping(value = "/cart/miniCart/{totalDisplay:.*}", method = RequestMethod.GET)
    public String getMiniCart(@PathVariable final String totalDisplay, final Model model)
    {
        //overriding functionality, different from the default accelerator storefront
    }
}

here已询问了此问题,接受的建议如下:

  • addon-web-spring.xml 中,覆盖控制器bean,例如
    <bean name="miniCartController" class="com.custom.storefrontaddon.controllers.misc.MyCustomMiniCartController"/>
  • addon-web-spring.xml 中,添加一个SimpleUrlHandlerMapping之类的
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/cart/miniCart/**">miniCartController</prop>
            </props>
        </property>
    </bean>
  • 现在将调用插件控制器,而不是目标URL的默认加速器控制器。

我的问题

Spring documentation明确表示

时,此机制如何工作
  

还有几件事不再可行:
  -首先选择带有SimpleUrlHandlerMappingBeanNameUrlHandlerMapping的控制器,然后根据@RequestMapping注释缩小方法。

Spring默认在加速器店面中使用RequestMappingHandlerMapping,并且在插件中我们引入SimpleUrlHandlerMapping。我想了解为什么这样做有效,当我阅读过的所有其他论坛帖子都说您不能在不同的控制器中覆盖@RequestMapping URL时,否则您将为重复的URL抛出异常。

1 个答案:

答案 0 :(得分:0)

在我的回答中,我会假设您输入错误,并且您的意思是MyCustomMiniCartController而不是MiniCartController:

<bean name="miniCartController" class="com.custom.storefrontaddon.controllers.misc.MyCustomMiniCartController"/>

这里的事情是SimpleUrlHandlerMapping无关,它的声明在 addon-web-spring.xml完全没用。

在addon中重新定义miniCartController bean会使该bean定义被addon类覆盖,因此addon类中声明的请求映射是RequestMappingHandlerMapping所“使用的”映射。