Spring MVC: How to return custom 404 errorpages?
Spring MVC: How to return custom 404 errorpages?
I'm looking for a clean way to return customized 404 errorpages in Spring 4 when a requested resource was not found. Queries to different domain types should result in different error pages.
Here some code to show my intention (Meter is a domain class):
@RequestMapping(value = "/{number}", method = RequestMethod.GET) public String getMeterDetails(@PathVariable("number") final Long number, final Model model) { final Meter result = meterService.findOne(number); if (result == null) { // here some code to return an errorpage } model.addAttribute("meter", result); return "meters/details"; }
I imagine several ways for handling the problem. First there would be the possibility to create RuntimeException
s like
@ResponseStatus(HttpStatus.NOT_FOUND) public class MeterNotFoundExcption extends RuntimeException { }
and then use an exception handler to render a custom errorpage (maybe containing a link to a list of meters or whatever is appropriate).
But I don't like polluting my application with many small exceptions.
Another possibility would be using HttpServletResponse
and set the statuscode manually:
@RequestMapping(value = "/{number}", method = RequestMethod.GET) public String getMeterDetails(@PathVariable("number") final Long number, final Model model, final HttpServletResponse response) { final Meter meter = meterService.findOne(number); if (meter == null) { response.setStatus(HttpStatus.NOT_FOUND.value()); return "meters/notfound"; } model.addAttribute("meter", meter); return "meters/details"; }
But with this solution I have to duplicate the first 5 lines for many controller methods (like edit, delete).
Is there an elegant way to prevent duplicating these lines many times?
Answer by Youddh for Spring MVC: How to return custom 404 errorpages?
modified your web.xml file.Using following code.
App Name 500 /error500.jsp 404 /error404.jsp
Access this by following code.
response.sendError(508802,"Error Message");
Now add this code in web.xml.
508802 /error500.jsp
Answer by Christian Rudolph for Spring MVC: How to return custom 404 errorpages?
The solution is much simpler than thought. One can use one generic ResourceNotFoundException
defined as follows:
public class ResourceNotFoundException extends RuntimeException { }
then one can handle errors within every controller with an ExceptionHandler
annotation:
class MeterController { // ... @ExceptionHandler(ResourceNotFoundException.class) @ResponseStatus(HttpStatus.NOT_FOUND) public String handleResourceNotFoundException() { return "meters/notfound"; } // ... @RequestMapping(value = "/{number}/edit", method = RequestMethod.GET) public String viewEdit(@PathVariable("number") final Meter meter, final Model model) { if (meter == null) throw new ResourceNotFoundException(); model.addAttribute("meter", meter); return "meters/edit"; } }
Every controller can define its own ExceptionHandler
for the ResourceNotFoundException
.
Answer by Taras for Spring MVC: How to return custom 404 errorpages?
You should follow this article where you can find detailed information about exception handling in Spring MVC projects.
@ControllerAdvice may help you in this case
Answer by Ekansh Rastogi for Spring MVC: How to return custom 404 errorpages?
You can map the error codes in web.xml like the following
400 /400 404 /404 500 /500
Now you can create a controller to map the url's that are hit when any of these error is found.
@Controller public class HTTPErrorHandler{ String path = "/error"; @RequestMapping(value="/404") public String error404(){ // DO stuff here return path+"/404"; } }
For full example see this tutorial
Answer by Manoj Kumar for Spring MVC: How to return custom 404 errorpages?
We can just add following lines of code into web.xml file and introduce a new jsp file named errorPage.jsp into root directory of the project to get the requirement done.
400 /errorPage.jsp 404 /errorPage.jsp 500 /errorPage.jsp
Answer by SerdukovAA for Spring MVC: How to return custom 404 errorpages?
Simple answer for 100% free xml:
Set properties for DispatcherServlet
public class SpringMvcInitializer extends abstractAnnotationConfigDispatcherServletInitializer { @Override protected Class[] getRootConfigClasses() { return new Class[] { RootConfig.class }; } @Override protected Class[] getServletConfigClasses() { return new Class[] {AppConfig.class }; } @Override protected String[] getServletMappings() { return new String[] { "/" }; } //that's important!! @Override protected void customizeRegistration(ServletRegistration.Dynamic registration) { boolean done = registration.setInitParameter("throwExceptionIfNoHandlerFound", "true"); // -> true if(!done) throw new RuntimeException(); }
}
Create @ControllerAdvice:
@ControllerAdvice public class AdviceController { @ExceptionHandler(NoHandlerFoundException.class) public String handle(Exception ex) { return "redirect:/404"; } @RequestMapping(value = {"/404"}, method = RequestMethod.GET) public String NotFoudPage() { return "404"; }
}
Create 404.jsp page with any content
That's all.
Fatal error: Call to a member function getElementsByTagName() on a non-object in D:\XAMPP INSTALLASTION\xampp\htdocs\endunpratama9i\www-stackoverflow-info-proses.php on line 72
0 comments:
Post a Comment