【问题标题】:Configure RequestMappingHandlerMapping to not decode url将 RequestMappingHandlerMapping 配置为不解码 url
【发布时间】:2014-03-08 20:55:53
【问题描述】:

我有一个带有 Java 配置的 Spring MVC 3.2.8 应用程序。我想禁用 url 解码,因为我在 uri 中有 this issue/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,没有相关的堆栈跟踪,应用程序在尝试访问自动装配的元素时失败,因为它是空的。评论上面的配置使它工作正常。

【问题讨论】:

  • 有异常发生吗?如果是肯定的,你能发布它的堆栈跟踪吗?v
  • 你在哪个 servlet 容器上?
  • 你真的需要提供更多细节,因为它在 3.2.8 上对我来说很好用。向我们展示您的其余(完整)配置。
  • 除非@Autowired 注释的required 属性设置为false,否则自动连接的目标不能是null。你做错了什么。

标签: java spring spring-mvc spring-3


【解决方案1】:

@EnableWebMvc 的文档描述了用于定制配置的三个自定义级别。你可以:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

    WebMvcConfigurationSupport javadoc 说

    它通常通过将@EnableWebMvc 添加到应用程序@Configuration 类来导入。另一种更高级的选择是直接从此扩展 类并根据需要覆盖方法记得添加 @Configuration 指向子类,@Bean 覆盖 @Bean 方法。

    【讨论】:

    • @SotiriosDelimanolis 看起来我已经将 WebMvcConfigurationSupport 与其他东西混淆了,因为查看源代码它没有任何类级别的注释。我编辑了我的答案
    猜你喜欢
    • 2013-07-17
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多