码迷,mamicode.com
首页 > 编程语言 > 详细

springboot异常处理

时间:2021-02-18 13:30:23      阅读:0      评论:0      收藏:0      [点我收藏+]

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

异常处理

1、设置默认错误页面

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

看官方文档:

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

src/
 +- main/
     +- java/
     |   + <source code>
     +- resources/
         +- public/
             +- error/
             |   +- 404.html
             +- <other public assets>

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

src/
 +- main/
     +- java/
     |   + <source code>
     +- resources/
         +- templates/
             +- error/
             |   +- 5xx.ftlh
             +- <other templates>

通俗易懂的说,就是在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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!