Blog coding and discussion of coding about JavaScript, PHP, CGI, general web building etc.

Saturday, August 20, 2016

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 RuntimeExceptions 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.

spring-mvc-exception-handling

@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:

  1. 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();  }  

    }

  2. 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";    }  

    }

  3. 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

Related Posts:

0 comments:

Post a Comment

Popular Posts

Fun Page

Powered by Blogger.