gpt4 book ai didi

spring-mvc - 如何避免初始化 Spring 的默认 RequestMappingHandlerMapping?

转载 作者:行者123 更新时间:2023-12-03 16:38:10 26 4
gpt4 key购买 nike

为了实现我们的请求映射版本控制解决方案,我实现了自己的 RequestMappingHandlerMapping 作为它的子类。我覆盖了 registerHandlerMethod()lookupHandlerMethod()。关键概念是一个请求映射可以出现多次,但各种实现存储在不同的 Java 包中。我的新类根据 servlet 路径的第一个路径元素(即版本号)从正确的包中选择所需的版本。在寻找合适的请求映射处理程序之前删除版本。

这就是我将它编织到 Spring 中的方式:

import javax.inject.Inject;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;

@Configuration
public class VersioningWebMvcConfigurationSupport extends WebMvcConfigurationSupport {

private VersioningRequestMappingHandlerMapping requestMappingHandlerMapping;

@Override
@Bean
public RequestMappingHandlerMapping requestMappingHandlerMapping() {
requestMappingHandlerMapping.setOrder(0);
requestMappingHandlerMapping.setInterceptors(getInterceptors());
return requestMappingHandlerMapping;
}

@Inject
public void setRequestMappingHandlerMapping(VersioningRequestMappingHandlerMapping requestMappingHandlerMapping) {
this.requestMappingHandlerMapping = requestMappingHandlerMapping;
}

}

恕我直言,我的 applicationContext.xml 的重要部分:

  <context:annotation-config />
<context:mbean-export />
<context:component-scan base-package="..." />
<mvc:annotation-driven />

如果您想让我在那里寻找其他线路,请告诉我。

我的问题是我的代码运行正确,重复项得到正确处理。然而,原始的 (?) RequestMappingHandlerMapping 仍然被初始化。由于重复的请求映射,那个失败了。

我怎样才能避免这种情况?在我看来,如果没有默认的 RequestMappingHandlerMapping,我的网络应用程序也能正常运行。

最佳答案

不是很确定,但是标签<mvc:annotation-driven />可能正在注册 RequestMappingHandlerMapping在您的网络应用程序中。

Spring MVC 文档提到,如果您使用 MVC 命名空间,RequestMappingHandlerMapping 默认启用:

Spring 3.1 introduced a new set of support classes for @RequestMapping methods called RequestMappingHandlerMapping and RequestMappingHandlerAdapter respectively. They are recommended for use and even required to take advantage of new features in Spring MVC 3.1 and going forward. The new support classes are enabled by default from the MVC namespace and with use of the MVC Java config but must be configured explicitly if using neither.

来源:documentation

所以我怀疑你必须摆脱那个 <mvc:annotation-driven />标记以禁用 RequestMappingHandlerMapping 的默认行为.

关于spring-mvc - 如何避免初始化 Spring 的默认 RequestMappingHandlerMapping?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13974027/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com