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