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