私のアプリケーションでは、Spring mvc が一貫して間違ったコントローラー メソッドを選択して実行する状況があります。以下のSpringからのデバッグログは問題を示しています.2つの一致が見つかります.1つはマッピングされているすべての未処理のマッピングコントローラーを処理する汎用目的のもので、もう1つはSpring mvc/api/**
を探している実際のものであり、より具体的なハンドラーよりもハンドラーを選択します見つかった。api/companies/2/records/cabinets/FileTypes/50/1
/api/**
Spring についての私の理解では、リクエスト マッピングに 2 つの一致がある場合、Spring は URL が長いハンドル メソッドを選択します。spring mvc が短いマッピングを選択するのはなぜですか?
次のマッピングがあるとします。
/api/companies/{id}/records/cabinets/FileTypes/{fileTypeId}/{versionId}
method1 にマッピング/api/**
method2 にマッピング
そして、api/companies/2/records/cabinets/FileTypes/50/1
上の 2 つの URL のハンドラー メソッドとして mvc pick をスプリングする必要があるパス。
デバッグ ログからの関連行を次に示します。
17:58:49,858 DEBUG [DispatcherServlet] DispatcherServlet with name 'main' processing PUT request for [/web/api/companies/2/records/cabinets/FileTypes/50/1]
17:58:49,858 TRACE [DispatcherServlet] Testing handler map [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping@2b25f2be] in DispatcherServlet with name 'main'
7:58:49,858 DEBUG [RequestMappingHandlerMapping] Looking up handler method for path /api/companies/2/records/cabinets/FileTypes/50/1
17:58:49,859 TRACE [RequestMappingHandlerMapping] Found 2 matching mapping(s) for [/api/companies/2/records/cabinets/FileTypes/50/1] : [{[/api/**],methods=[PUT],params=[],headers=[],consumes=[],produces=[],custom=[]}, {[/api/companies/{id}/records/cabinets/FileTypes/{fileTypeId}/{versionId}],methods=[PUT],params=[],headers=[],consumes=[],produces=[],custom=[]}]