Я использую 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
}
}
Этот вопрос был задан здесь , и принятый совет должен был сделать следующее:
- В addon-web-spring.xml , переопределить компонент контроллера, как
<bean name="miniCartController" class="com.custom.storefrontaddon.controllers.misc.MyCustomMiniCartController"/>
- В addon-web-spring.xml , добавьте
SimpleUrlHandlerMapping
like
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/cart/miniCart/**">miniCartController</prop>
</props>
</property>
</bean>
- Теперь будет вызываться аддон-контроллер вместо контроллера акселератора по умолчанию для целевого URL.
Мой вопрос
Как работает этот механизм, когда в документации Spring прямо сказано, что
Есть также несколько вещей, которые больше невозможны:
- Выбратьконтроллер сначала с SimpleUrlHandlerMapping
или BeanNameUrlHandlerMapping
, а затем сузить методна основе @RequestMapping
аннотаций.
Spring по умолчанию использует RequestMappingHandlerMapping
в витрине акселератора, а в аддоне мы вводим SimpleUrlHandlerMapping
.Я хочу понять, почему это работает, когда все остальные прочитанные мной сообщения на форуме говорят, что вы не можете переопределить @RequestMapping
URL-адреса в другом контроллере, или вы получите исключение для дублирующего URL-адреса.