おそらく私は404何時間も苦しんでいたので、URLがどのようにマッピングされているかも知っておく必要があります。リクエストを処理するハンドラーには2種類あります。BeanNameUrlHandlerMappingとSimpleUrlHandlerMapping。を定義したときはservlet-mapping、を使用していSimpleUrlHandlerMappingます。知っておくべきことの1つは、これら2つのハンドラーが、alwaysUseFullPathデフォルトでと呼ばれる共通のプロパティを共有することfalseです。
falseここで、Springは完全パスを使用してURLをコントローラーにマップしないことを意味します。どういう意味ですか?これは、以下を定義するときを意味しますservlet-mapping。
<servlet-mapping>
<servlet-name>viewServlet</servlet-name>
<url-pattern>/perfix/*</url-pattern>
</servlet-mapping>
ハンドラーは実際に*パーツを使用してコントローラーを見つけます。たとえば、次のコントローラを404使用してリクエストすると、エラーが発生します/perfix/api/feature/doSomething
@Controller()
@RequestMapping("/perfix/api/feature")
public class MyController {
@RequestMapping(value = "/doSomething", method = RequestMethod.GET)
@ResponseBody
public String doSomething(HttpServletRequest request) {
....
}
}
パーフェクトマッチですね。しかし、なぜか404。前述のように、デフォルト値のalwaysUseFullPathfalseはfalseです。つまり、リクエストで/api/feature/doSomethingは、対応するコントローラーを見つけるためにのみ使用されますが、コントローラーはそのパスを気にしません。URLをMyController baseに変更するか、MyController baseから/perfix/perfix/api/feature/doSomething削除する必要があります。perfix@RequestingMapping