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

Spring Controller to handle all requests not matched by other Controllers

我有一系列控制器,其请求映射与某些 URL 相匹配。我还想要一个控制器,它可以匹配任何其他 URL 与其他控制器不匹配的控制器。 有没有办法在 Spring MVC 中做到这一点?例如,我是否可以使用 @RequestMapping(value="**") 的控制器并更改处理 Spring 控制器的顺序,以便最后处理该控制器以捕获所有不匹配的请求?还是有另一种方法来实现这种行为?

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

这将以正确的控制器匹配顺序完成工作。没有匹配到的时候使用。

如果你的基础 url 是这样的= http://localhost/myapp/ where myapp is your context 那么 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 String allRequests() {
    return "index.html";
}