Spring MVC: How to return custom 404 errorpages?

后端 未结 8 2022
遇见更好的自我
遇见更好的自我 2020-11-27 04:40

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 diff

相关标签:
8条回答
  • 2020-11-27 04:50

    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

    0 讨论(0)
  • 2020-11-27 04:55

    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.

    0 讨论(0)
  • 2020-11-27 04:57

    You can map the error codes in web.xml like the following

        <error-page>
            <error-code>400</error-code>
            <location>/400</location>
        </error-page>
    
        <error-page>
            <error-code>404</error-code>
            <location>/404</location>
        </error-page>
    
        <error-page>
            <error-code>500</error-code>
            <location>/500</location>
        </error-page>
    

    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 my tutorial about this

    0 讨论(0)
  • 2020-11-27 05:01

    I also needed to NOT use org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer.

    According to org.springframework.web.servlet.DispatcherServlet.setThrowExceptionIfNoHandlerFound(boolean): "Note that if DefaultServletHttpRequestHandler is used, then requests will always be forwarded to the default servlet and a NoHandlerFoundException would never be thrown in that case."

    https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/DispatcherServlet.html#setThrowExceptionIfNoHandlerFound-boolean-

    Before

    @Configuration
    @EnableWebMvc
    @ComponentScan(basePackages = "com.foo.web")
    public class WebMvcConfiguration extends WebMvcConfigurerAdapter {
    
      @Override
      public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
      }
    
      // ...
    }
    

    After

    @Configuration
    @EnableWebMvc
    @ComponentScan(basePackages = "com.foo.web")
    public class WebMvcConfiguration extends WebMvcConfigurerAdapter {
    
      @Override
      public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
      }
    
      // ...
    }
    
    0 讨论(0)
  • 2020-11-27 05:03

    I'm working with a Netbeans project.I added following lines to my web.xml.It only works when I give the path from WEB-INF folder as follows.

        <error-page>
            <error-code>404</error-code>
            <location>/WEB-INF/view/common/errorPage.jsp</location>
        </error-page>
    
    0 讨论(0)
  • 2020-11-27 05:04

    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.

    <error-page>
        <error-code>400</error-code>
        <location>/errorPage.jsp</location>
    </error-page>
    <error-page>
        <error-code>404</error-code>
        <location>/errorPage.jsp</location>
    </error-page>
    <error-page>
        <error-code>500</error-code>
        <location>/errorPage.jsp</location>
    </error-page>
    
    0 讨论(0)
提交回复
热议问题