Spring Controller用于处理与其他控制器不匹配的所有请求

rur*_*den 10 java mapping model-view-controller spring controller

我有一系列控制器与请求映射匹配某些URL.我还想要一个控制器,它将匹配其他控制器不匹配的任何其他URL.有没有办法在Spring MVC中执行此操作?例如,我可以使用带有@RequestMapping(value ="**")的控制器并更改Spring控制器的处理顺序,以便最后处理此Controller以捕获所有不匹配的请求吗?或者有另一种方法来实现这种行为吗?

Riz*_*man 10

如果您的基本网址类似于= 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";
}
Run Code Online (Sandbox Code Playgroud)


pat*_*s91 7

@RequestMapping (value = "/**", method = {RequestMethod.GET, RequestMethod.POST})
public ResponseEntity<String> defaultPath() {
    LOGGER.info("Unmapped request handling!");
    return new ResponseEntity<String>("Unmapped request", HttpStatus.OK);
}
Run Code Online (Sandbox Code Playgroud)

这将通过适当的控制器匹配顺序完成工作.当没有匹配时,它将被使用.

  • 这是有问题的。由于某种原因,该控制器方法也捕获对静态资源的请求。 (2认同)