Spring Controller to handle all requests not matched by other Controllers
Solution 1
If your base url is like that= http://localhost/myapp/ where myapp is your context then myapp/a.html, myapp/b.html myapp/c.html will get mapped to the first 3 method in the following controller. But anything else will reach the last method which matches **. Please note that , if you put ** mapped method at the top of your controller then all request will reach this method.
Then this controller servrs your requirement:
@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";
}
Solution 2
@RequestMapping (value = "/**", method = {RequestMethod.GET, RequestMethod.POST})
public ResponseEntity<String> defaultPath() {
LOGGER.info("Unmapped request handling!");
return new ResponseEntity<String>("Unmapped request", HttpStatus.OK);
}
This will do the work with proper order of controller matching. It will be used when nothing is matched.
rurounisuikoden
Updated on February 21, 2021Comments
-
rurounisuikoden about 3 years
I have a series of Controllers with Request Mappings that match certain URL's. I also want a Controller that will match any other URL not matched by the other Controllers. Is there a way to do this in Spring MVC? For example, could i have a controller with @RequestMapping(value="**") and change the order in which Spring Controllers are processed so this Controller is processed last to catch all unmatched requests? Or is there another way to achieve this behaviour?
-
Leon about 8 yearsIf I understand correctly, you want to handle all 404s? But possibly do something useful, rather than return 'not found'?
-
reto about 8 yearsYes your idea would work. Have you tried it? See github.com/stormpath/spring-mvc-rest-exhandler/blob/master/… for example
-
rurounisuikoden about 8 yearsYes, i want a way to process URL's not matched by any other Controller i have made.
-
rurounisuikoden about 8 yearsWouldn't the default controller you have provided in that link be matched before other requestMappings?
-
Kanagavelu Sugumar almost 6 years
-
-
Kanagavelu Sugumar almost 6 yearsAfter this configuration my swagger stopped working. github.com/springfox/springfox/issues/2532
-
Mustofa Rizwan almost 6 yearsuse @RequestMapping("/anything/") instead of @RequestMapping("/") for this configuraration
-
Kanagavelu Sugumar almost 6 yearsBut that will handle only non mapped requests under
/anything
-
Mustofa Rizwan almost 6 yearsthen remove the last method from this class value="**", and use custom exception handler... which will make sure that any non mapped request goes to a certain 404 page
-
Kanagavelu Sugumar almost 6 yearsException handler wont solve my problem, want to handle it inside @RequestMapping method. Anyhow Thanks & plus1.
-
manash over 5 yearsThis is problematic. For some reason, this controller method catches request to static resources too.