我有一个带有 Java 配置的 Spring MVC 3.2.8 应用程序。我想禁用 url 解码,因为我有 this issue uri 中包含 /
。 Spring 3.2.8应该解决这个问题。
问题是,我无法在 RequestMappingHandlerMapping
中将 Url 解码设置为 false
。我尝试用以下方法覆盖它:
@Configuration
public class MobileWebPublicConfig extends WebMvcConfigurationSupport {
@Bean
public RequestMappingHandlerMapping requestMappingHandlerMapping() {
RequestMappingHandlerMapping handlerMapping = super.requestMappingHandlerMapping();
handlerMapping.setUrlDecode(false);
return handlerMapping;
}
}
但是当我这样做时,它会破坏我的应用程序,自动连接停止工作。
我错过了什么?
更新:容器是 Tomcat 6,没有相关的堆栈跟踪,应用程序在尝试访问 Autowiring 元素时失败,因为该元素为空。注释上面的配置使其可以正常工作。
最佳答案
@EnableWebMvc
的文档描述了用于定制配置的三个级别的定制。您可以:
- 单独使用
@EnableWebMvc
导入标准配置。 - 将
@EnableWebMvc
与扩展WebMvcConfigurerAdapter
的配置类一起使用;子类将自动调用其实现的方法,以将更改应用到标准配置。 - 不要使用
@EnableWebMvc
,而是让您的配置类扩展WebMvcConfigurationSupport
完全控制您的配置。
但是,文档没有明确说明的是,如果您选择选项 3,它不会自动应用扩展 WebMvcConfigurerAdapter
的类中实现的方法。
正如其他人所说,我们确实需要查看您的完整配置,但如果简单地扩展 WebMvcConfigurationSupport
并删除 @EnableWebMvc
会破坏配置的其他部分,我猜测您仍在配置中的其他位置使用 WebMvcConfigurerAdapter
。
如果是这种情况,您有两个选择:
- 重写所有使用
WebMvcConfigurerAdapter
的配置,并将代码移至扩展WebMvcConfigurationSupport
的单个配置类中。 - 延长
DelegatingWebMvcConfiguration
而不是WebMvcConfigurationSupport
。这将为您提供使用 @EnableWebMvc 时通常获得的所有标准配置行为,但仍然允许您根据需要重写方法。请注意,在您重写的任何方法中,如果您也想保留默认行为,则还需要调用 super() 中的等效方法。
关于java - 配置RequestMappingHandlerMapping不解码url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22274972/