springboot异常处理

2021-02-19 03:20

阅读:714

标签:log   stack   自定义   test   lex   sources   oba   image   source   

异常处理

1、设置默认错误页面

  • 默认情况下,Spring Boot提供/error处理所有错误的映射,所有我们平时程序出错会弹出如下第二张图页面
  • 对于机器客户端,它将生成JSON响应,其中包含错误,HTTP状态和异常消息的详细信息。对于浏览器客户端,响应一个“ whitelabel”错误视图,以HTML格式呈现相同的数据
  • 技术图片技术图片

看官方文档:

例如,要映射404到静态HTML文件,您的目录结构如下:

src/
 +- main/
     +- java/
     |   + 
     +- resources/
         +- public/
             +- error/
             |   +- 404.html
             +- 

5xx使用FreeMarker模板映射所有错误,您的目录结构如下:

src/
 +- main/
     +- java/
     |   + 
     +- resources/
         +- templates/
             +- error/
             |   +- 5xx.ftlh
             +- 

通俗易懂的说,就是在resources目录下建立public目录,在里面新建error目录,在error目录下新建错误页面,页面名称以状态码命名:404.html,或者:4xx.html(表示以4开头的状态异常都跳转该页面),或者在templates下新建error目录,在里面新建错误页面,命名:404.html,同public目录。

2、设置全局异常处理

@ControllerAdvice+@ExceptionHandler处理全局异常;底层是 ExceptionHandlerExceptionResolver 支持的

@ControllerAdvice
@Slf4j
public class GlobalException extends Exception{
    @ExceptionHandler({FileUploadException.class, MaxUploadSizeExceededException.class})
    public String test(Exception e){ //括号里的异常,是捕捉到的异常封装进去的
        log.error("e="+e);//打印异常信息
        return "error/500";
    }
}

3、自定义异常

@ResponseStatus+自定义异常 ;底层是 ResponseStatusExceptionResolver ,把responsestatus注解的信息底层调用 response.sendError(statusCode, resolvedReason);tomcat发送的/error

//抛出自定义的异常,根据默认规则,发生指定异常时,会自动跳转对应的错误页
//value = HttpStatus.FORBIDDEN,对应着状态码
//reason = "这是什么状态码?",代表抛出的异常信息
@ResponseStatus(value = HttpStatus.FORBIDDEN,reason = "这是什么状态码?")
public class CustomException extends Exception{
    public CustomException() {
        super();
    }

    public CustomException(String message) {
        super(message);
    }
}

4、自定义异常解析器

实现HandlerExceptionResolver接口

@Order(value = Ordered.HIGHEST_PRECEDENCE)//优先级,数字越小,优先级越高
@Component//将组件加载到容器中进行管理
public class CustomerDefaultException implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, 
                                         HttpServletResponse httpServletResponse, 
                                         Object o, 
                                         Exception e) {
        try {
            //511是自定义状态码
            httpServletResponse.sendError(511,"自定义默认异常解析器");
        } catch (IOException ioException) {
            ioException.printStackTrace();
        }
        return new ModelAndView();
    }
}

springboot异常处理

标签:log   stack   自定义   test   lex   sources   oba   image   source   

原文地址:https://www.cnblogs.com/letgofishing/p/14407012.html


评论


亲,登录后才可以留言!