为了实现我们的请求映射版本控制解决方案,我将自己的解决方案实现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
.