为了实现我们的请求映射版本控制解决方案,我实现了自己的
这是我如何将它编入Spring中的方式:
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
仍然被初始化。由于重复的请求映射,它会失败。
我该如何避免这种情况?在我看来,我的 Web 应用程序可以在没有默认的 RequestMappingHandlerMapping
的情况下很好地运行。