java - 配置RequestMappingHandlerMapping不解码url

标签 java spring spring-mvc spring-3

我有一个带有 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 的文档描述了用于定制配置的三个级别的定制。您可以:

  1. 单独使用@EnableWebMvc导入标准配置。
  2. @EnableWebMvc 与扩展 WebMvcConfigurerAdapter 的配置类一起使用;子类将自动调用其实现的方法,以将更改应用到标准配置。
  3. 不要使用@EnableWebMvc,而是让您的配置类扩展 WebMvcConfigurationSupport完全控制您的配置。

但是,文档没有明确说明的是,如果您选择选项 3,它不会自动应用扩展 WebMvcConfigurerAdapter 的类中实现的方法。

正如其他人所说,我们确实需要查看您的完整配置,但如果简单地扩展 WebMvcConfigurationSupport 并删除 @EnableWebMvc 会破坏配置的其他部分,我猜测您仍在配置中的其他位置使用 WebMvcConfigurerAdapter

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

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

关于java - 配置RequestMappingHandlerMapping不解码url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22274972/

相关文章:

Java JPG转PNG

使用 Memcached 进行 Spring-Hibernate 缓存

java - Tomcat 不读取 Spring-Boot 应用程序属性

java - 当我尝试在 CRUD Spring boot 应用程序中添加新客户端时,捕获 NullPointerException

java - 如何解决应用程序中的 Java JLabel 问题?

java - 如何递归地循环遍历 ZipEntry

java - 为什么Iterator接口(interface)中没有add方法

java - 如何在 Controller 之间传递 ModelAttribute?

spring-mvc - "java.lang.NoClassDefFoundError: org/springframework/core/type/AnnotatedTypeMetadata"

java - 在 JPA 中,如果一行存在,我可以有一个只读 boolean 值吗?