我有一系列带有与某些URL匹配的请求映射的控制器。我还想要一个控制器,该控制器将匹配其他控制器未匹配的任何其他URL。在Spring MVC中有办法做到这一点吗?例如,我是否可以使用具有@RequestMapping(value =“ **”)的控制器并更改处理Spring控制器的顺序,以便最后处理该Controller以捕获所有不匹配的请求?还是有另一种方式来实现这种行为?
如果你的基本网址是这样的= 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); }
这将按照正确的控制器匹配顺序进行工作。当没有匹配项时将使用它。