リクエストマッピングのバージョン管理のためのソリューションを実装するために、私RequestMappingHandlerMapping
はそのサブクラスとして独自のソリューションを実装しました。上書きregisterHandlerMethod()
してlookupHandlerMethod()
。重要な概念は、1つの要求マッピングが複数回表示される可能性があるが、さまざまな実装が異なるJavaパッケージに格納されることです。私の新しいクラスは、サーブレットパスの最初のパス要素(バージョン番号)に基づいて、正しいパッケージから必要なバージョンを選択します。適切なリクエストマッピングハンドラを探す前に、バージョンが削除されます。
これは私がそれを春に織り込む方法です:
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のIMHOの重要な部分:
<context:annotation-config />
<context:mbean-export />
<context:component-scan base-package="..." />
<mvc:annotation-driven />
他の行を探してほしい場合はお知らせください。
私の問題は、コードが正しく実行され、重複が適切に処理されることです。ただし、元の(?)RequestMappingHandlerMapping
はまだ初期化されています。リクエストマッピングが重複しているため、これは失敗します。
どうすればこれを回避できますか?私の見方では、私のWebアプリはデフォルトなしでうまく動作しますRequestMappingHandlerMapping
。