配置RequestMappingHandlerMapping以不解码url

时间:2014-03-08 20:55:54

标签: java spring spring-mvc spring-3

我有一个带有Java配置的 Spring MVC 3.2.8 应用程序。我希望禁用网址解码,因为我在uri中有/ false Spring 3.2.8 应该解决这个问题。

问题是,我无法将{url}解码设置为RequestMappingHandlerMapping中的@Configuration public class MobileWebPublicConfig extends WebMvcConfigurationSupport { @Bean public RequestMappingHandlerMapping requestMappingHandlerMapping() { RequestMappingHandlerMapping handlerMapping = super.requestMappingHandlerMapping(); handlerMapping.setUrlDecode(false); return handlerMapping; } } 。我试图用以下方式覆盖它:

{{1}}

但是当我这样做时,它会破坏我的应用程序,自动接线停止工作。

我错过了什么?

UPDATE :容器是Tomcat 6,没有堆栈跟踪相关,当尝试访问自动装配的元素时,应用程序因为它为空而失败。评论上面的配置使它工作正常。

2 个答案:

答案 0 :(得分:1)

@EnableWebMvc的文档介绍了定制配置的三个级别的自定义。你可以:

  1. 单独使用@EnableWebMvc导入标准配置。
  2. @EnableWebMvc与扩展WebMvcConfigurerAdapter的配置类一起使用;子类将自动调用其实现的方法,以将更改应用于标准配置。
  3. 请勿使用@EnableWebMvc,而是让您的配置类扩展WebMvcConfigurationSupport以完全控制您的配置。
  4. 但是,文档没有说清楚的是,如果你选择选项3,它将不会自动应用扩展WebMvcConfigurerAdapter的类中实现的方法。

    正如其他人所说,我们确实需要查看完整配置,但如果只是扩展WebMvcConfigurationSupport并删除@EnableWebMvc会破坏配置的其他部分,我的猜测是您仍在使用{{ 1}}你的配置中的其他地方。

    如果是这种情况,您有两种选择:

    1. 重写使用WebMvcConfigurerAdapter的所有配置,并将代码移动到扩展WebMvcConfigurerAdapter的单个配置类中。
    2. 扩展DelegatingWebMvcConfiguration而不是WebMvcConfigurationSupport。这将为您提供使用WebMvcConfigurationSupport时通常会获得的所有标准配置行为,但仍允许您根据需要覆盖方法。请注意,在您覆盖的任何方法中,如果您还想保留默认行为,还需要在@EnableWebMvc中调用等效方法。

答案 1 :(得分:0)

编辑:还要确保您的某个地方没有@EnableWebMvc注释,因为此注释会导入原始WebMvcConfigurationSupport而不是扩展版本。

WebMvcConfigurationSupport javadoc说

  

通常通过将@EnableWebMvc添加到应用程序@Configuration类来导入。另一种更高级的选择是直接从此扩展   必要时记住要添加的类和重写方法   @Configuration到子类,@ Node来重写@Bean方法。