弹簧控制器,用于处理其他控制器不匹配的所有请求
2022-09-03 12:31:34
我有一系列具有与某些URL匹配的请求映射的控制器。我还想要一个控制器,它将与其他控制器不匹配的任何其他URL匹配。有没有办法在春季MVC中做到这一点?例如,我是否可以有一个具有@RequestMapping(value=“**”)的控制器并更改Spring控制器的处理顺序,以便最后处理此控制器以捕获所有不匹配的请求?还是有另一种方法可以实现这种行为?
我有一系列具有与某些URL匹配的请求映射的控制器。我还想要一个控制器,它将与其他控制器不匹配的任何其他URL匹配。有没有办法在春季MVC中做到这一点?例如,我是否可以有一个具有@RequestMapping(value=“**”)的控制器并更改Spring控制器的处理顺序,以便最后处理此控制器以捕获所有不匹配的请求?还是有另一种方法可以实现这种行为?
如果你的基本网址是这样的= 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);
}
这将通过控制器匹配的正确顺序完成工作。当没有任何匹配时,将使用它。