3

リクエストマッピングのバージョン管理のためのソリューションを実装するために、私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

4

1 に答える 1

4

よくわかりませんが、タグ<mvc:annotation-driven />がWebアプリに登録されている可能性がありRequestMappingHandlerMappingます。

Spring MVCのドキュメントには、MVC名前空間を使用している場合、RequestMappingHandlerMappingがデフォルトで有効になっていると記載されています。

Spring 3.1では、それぞれRequestMappingHandlerMappingおよびRequestMappingHandlerAdapterと呼ばれる@RequestMappingメソッドの新しいサポートクラスのセットが導入されました。これらは使用が推奨されており、SpringMVC3.1以降の新機能を利用するためにも必要です。新しいサポートクラスは、MVC名前空間からMVC Java構成を使用してデフォルトで有効になっていますが、どちらも使用しない場合は明示的に構成する必要があります。

出典:ドキュメント

したがって<mvc:annotation-driven />、のデフォルトの動作を無効にするには、そのタグを削除する必要があると思いますRequestMappingHandlerMapping

于 2012-12-20T15:17:52.907 に答える