Настройка контроллеров витрины ускорителя Hybris в аддоне - PullRequest
0 голосов
/ 27 ноября 2018

Я использую 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-адреса.

1 Ответ

0 голосов
/ 02 декабря 2018

В моем ответе я предполагаю, что вы сделали опечатку, и вы имели в виду MyCustomMiniCartController вместо MiniCartController в:

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

Дело в том, что SimpleUrlHandlerMapping не имеет ничего общего, и его объявление вaddon-web-spring.xml абсолютно бесполезен.

Переопределение компонента miniCartController в аддоне делает определение компонента переопределенным классом аддона, поэтому отображение запроса, объявленное в классе аддона, является "используемым"RequestMappingHandlerMapping.

...