特定のURLに一致するリクエストマッピングを備えた一連のコントローラーがあります。他のコントローラーと一致しない他のURLと一致するコントローラーも必要です。 Spring MVCでこれを行う方法はありますか?たとえば、@ RequestMapping(value = "**")のコントローラーを作成し、Springコントローラーが処理される順序を変更して、このコントローラーが最後に処理され、一致しないすべての要求をキャッチできるようにすることはできますか?または、この動作を実現する別の方法はありますか?
ベースURLが次のようになっている場合 http:// localhost/myapp / ここで、myappはコンテキストです。myapp/ a.html、myapp/b.html myapp/c.htmlは、次のコントローラの最初の3つのメソッド。しかし、他のものは**に一致する最後のメソッドに到達します。 **マップされたメソッドをコントローラーの上部に配置すると、すべてのリクエストがこのメソッドに到達することに注意してください。
次に、このコントローラーはあなたの要件を満たします:
@Controller
@RequestMapping("/")
public class ImportController{
@RequestMapping(value = "a.html", method = RequestMethod.GET)
public ModelAndView getA(HttpServletRequest req) {
ModelAndView mv;
mv = new ModelAndView("a");
return mv;
}
@RequestMapping(value = "b.html", method = RequestMethod.GET)
public ModelAndView getB(HttpServletRequest req) {
ModelAndView mv;
mv = new ModelAndView("b");
return mv;
}
@RequestMapping(value = "c.html", method = RequestMethod.GET)
public ModelAndView getC(HttpServletRequest req) {
ModelAndView mv;
mv = new ModelAndView("c");
return mv;
}
@RequestMapping(value="**",method = RequestMethod.GET)
public String getAnythingelse(){
return "redirect:/404.html";
}
@RequestMapping (value = "/**", method = {RequestMethod.GET, RequestMethod.POST})
public ResponseEntity<String> defaultPath() {
LOGGER.info("Unmapped request handling!");
return new ResponseEntity<String>("Unmapped request", HttpStatus.OK);
}
これにより、コントローラのマッチングの適切な順序で作業が行われます。何も一致しない場合に使用されます。