おそらく私は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
。前述のように、デフォルト値のalwaysUseFullPath
falseはfalseです。つまり、リクエストで/api/feature/doSomething
は、対応するコントローラーを見つけるためにのみ使用されますが、コントローラーはそのパスを気にしません。URLをMyController baseに変更するか、MyController baseから/perfix/perfix/api/feature/doSomething
削除する必要があります。perfix
@RequestingMapping