自定义错误请求HTTP400页面Spring MVC

时间:2018-01-04 16:38:41

标签: java spring error-handling bad-request

是否可以在完成错误请求并返回HTTP400错误代码时自定义从Spring返回的html页面?

2 个答案:

答案 0 :(得分:0)

是的,你可以做到这一点。

您需要定义全局错误处理程序 ControllerAdvice 注释。

示例代码为:

@ControllerAdvice
public class GlobalExceptionHandler {

    public static final String DEFAULT_ERROR_VIEW = "error";

    @ExceptionHandler(value = Exception.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {

        // If the exception is annotated with @ResponseStatus rethrow it and let
        // the framework handle it.
        if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null)
            throw e;

        // setup and send the user to a default error-view.
        ModelAndView mav = new ModelAndView();
        mav.addObject("exception", e);
        mav.addObject("url", req.getRequestURL());
        mav.setViewName(DEFAULT_ERROR_VIEW);
        return mav;
    }
}

进一步阅读:

  1. https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/ControllerAdvice.html
  2. https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc

答案 1 :(得分:0)

要添加@Yogi,请回答2个替代方案:

  1. 如果您使用的是 web.xml ,则可以使用非常方便的选项来提供每个HTTP错误代码专用的“查看”页面
  2. <error-page>
       <error-code>400</error-code>
       <location>/WEB-INF/my/location/to/http/errors/400.jsp</location>
    </error-page>
    
    1. Spring Boot 还提供了一种非常方便的方法,可以使用附加选项为http错误类别组提供View页面。 Take a look at the documentation。简而言之,您可以在/error目录下的/resources目录下提供View页面或HTTP-Error-Code-group页面(方便的约定配置方法)。