我有一个带有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,没有堆栈跟踪相关,当尝试访问自动装配的元素时,应用程序因为它为空而失败。评论上面的配置使它工作正常。
答案 0 :(得分:1)
@EnableWebMvc
的文档介绍了定制配置的三个级别的自定义。你可以:
@EnableWebMvc
导入标准配置。@EnableWebMvc
与扩展WebMvcConfigurerAdapter
的配置类一起使用;子类将自动调用其实现的方法,以将更改应用于标准配置。@EnableWebMvc
,而是让您的配置类扩展WebMvcConfigurationSupport
以完全控制您的配置。但是,文档没有说清楚的是,如果你选择选项3,它将不会自动应用扩展WebMvcConfigurerAdapter
的类中实现的方法。
正如其他人所说,我们确实需要查看完整配置,但如果只是扩展WebMvcConfigurationSupport
并删除@EnableWebMvc
会破坏配置的其他部分,我的猜测是您仍在使用{{ 1}}你的配置中的其他地方。
如果是这种情况,您有两种选择:
WebMvcConfigurerAdapter
的所有配置,并将代码移动到扩展WebMvcConfigurerAdapter
的单个配置类中。DelegatingWebMvcConfiguration
而不是WebMvcConfigurationSupport
。这将为您提供使用WebMvcConfigurationSupport
时通常会获得的所有标准配置行为,但仍允许您根据需要覆盖方法。请注意,在您覆盖的任何方法中,如果您还想保留默认行为,还需要在@EnableWebMvc
中调用等效方法。 答案 1 :(得分:0)
编辑:还要确保您的某个地方没有@EnableWebMvc
注释,因为此注释会导入原始WebMvcConfigurationSupport
而不是扩展版本。
WebMvcConfigurationSupport javadoc说
通常通过将@EnableWebMvc添加到应用程序@Configuration类来导入。另一种更高级的选择是直接从此扩展 必要时记住要添加的类和重写方法 @Configuration到子类,@ Node来重写@Bean方法。