настройка весны 3 mvc: аннотация для RequestMappingHandlerMapping

Я использую <mvc:annotation-driven/> и хочу настроить RequestMappingHandlerMapping для отключения useTrailingSlashMatch. Когда я объявляю еще один RequestMappingHandlerMapping, я получаю 2 RequestMappingHandlerMapping. Как мне настроить RequestMappingHandlerMapping ?


person Cemo    schedule 27.11.2012    source источник


Ответы (4)


Как вы уже заметили, это возможно в xml, удалив mvc:annotation-driven и заменив его полным эквивалентом xml:

<bean name="handlerAdapter" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <property name="webBindingInitializer">
        <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
            <property name="conversionService" ref="conversionService"></property>
            <property name="validator">
                <bean class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
            </property>
        </bean>
    </property>
    <property name="messageConverters">
        <list>
            <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
            <bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"/>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter"></bean>
            <bean class="org.springframework.http.converter.ResourceHttpMessageConverter"></bean>
            <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"></bean>
            <bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter"></bean>
        </list>
    </property>
</bean>

<bean name="handlerMapping" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
    <property name="useTrailingSlashMatch" value="true"></property>
</bean>
person Biju Kunjummen    schedule 29.11.2012

Можете ли вы попробовать с конфигурацией Java переопределить значение RequestMappingHandlerMapping

@Configuration
@ComponentScan(basePackages = "base.package.name")
public class WebAppConfig extends WebMvcConfigurationSupport {

    @Override
    @Bean
    public RequestMappingHandlerMapping requestMappingHandlerMapping() {
        RequestMappingHandlerMapping rmh = super.requestMappingHandlerMapping();
        rmh.setUseTrailingSlashMatch(false);
        return rmh;
    }
}
person jeevatkm    schedule 29.11.2012
comment
Я уже решил, заменив всю конфигурацию xml программной java. Но я также пробовал это, которое мне не помогло. - person Cemo; 29.11.2012
comment
Хорошо, конфигурация Java сработала для вас; Хорошо. Если у вас есть время, обновите сообщение, добавив детали вашего решения. Это будет информировать будущих зрителей :) - person jeevatkm; 29.11.2012
comment
Собственно, у меня такое же намерение. Но мое решение не является ответом на вопрос. Настоящее решение должно быть основано на конфигурации xml. - person Cemo; 29.11.2012
comment
@Cemo Можете ли вы объяснить, почему это решение не сработало? Похоже, это очень похоже на это решение - person Alan Berezin; 20.03.2016
comment
@AlanBerezin В то время, когда мне задали этот вопрос, я использовал подход, полностью основанный на xml, для настройки bean-компонентов. Смешивание конфигураций кажется мне немного опасным. Т.к. легко может заманить моих коллег в ловушку. В настоящее время я являюсь активным сторонником Spring Boot и конфигурации Java. Я полностью оставил конфигурации xml, которые уродливы и менее безопасны для типов по сравнению с конфигурацией java. Этот ответ, вероятно, сработает и сейчас. - person Cemo; 22.03.2016

Если вам нужно решение, не связанное с дублированием функций в Spring, вы можете переопределить DisplatcherServlet. в контейнере Servlet 3.0 это может выглядеть так:

@WebServlet(name="spring-dispatcher", loadOnStartup=1, urlPatterns={"/"},
        initParams={
            @WebInitParam(name="contextConfigLocation", 
            value="/WEB-INF/spring/spring-dispatcher-servlet.xml")})
public class MyDispatcherServlet extends DispatcherServlet {

    @Override
    protected void initStrategies(ApplicationContext context) {
        super.initStrategies(context);
        for (RequestMappingInfoHandlerMapping handlerMapping 
                : BeanFactoryUtils.beansOfTypeIncludingAncestors(
                    context, RequestMappingInfoHandlerMapping.class, true, false).values()) {

            handlerMapping.setUseTrailingSlashMatch(false);
        }
    }
}
person scarba05    schedule 29.03.2013
comment
Я написал сообщение в блоге об этом 3-2/" rel="nofollow noreferrer">scarba05.co.uk/blog/2013/03/ - person scarba05; 29.03.2013

Добавьте следующее в файл конфигурации Spring, чтобы переключить поле useTrailingSlashMatch.

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
    <property name="useTrailingSlashMatch" value="true">
    </property>
</bean>
person Kevin Bowersox    schedule 27.11.2012
comment
Я уже пробовал это. mvc:annotation-driven создает еще один RequestMappingHandlerMapping. Я указал на мой вопрос это. - person Cemo; 27.11.2012