写点什么

SpringBoot2----- 异常处理,快手支付中台 java 面试题

用户头像
极客good
关注
发布于: 刚刚




[](


)错误处理


===================================================================


[](


)1、默认规则




  • [ ] 默认情况下,Spring Boot 提供/error 处理所有错误的映射

  • [ ] 对于机器客户端,它将生成 JSON 响应,其中包含错误,HTTP 状态和异常消息的详细信息。对于浏览器客户端,响应一个“ whitelabel”错误视图,以 HTML 格式呈现相同的数据



![在这里插入图片描述](https://img-blog.csdnimg.cn/b9a489e9285e4f709e9000350e7ee2a1.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


nLmNzZG4ubmV0L20wXzUzMTU3MTcz,size_16,color_FFFFFF,t_70)



[](

)error/下的 4xx,5xx 页面会被自动解析





[](


)2、定制错误处理逻辑



[](

)自定义错误页

[](

)error/404.html error/5xx.html;有精确的错误状态码页面就匹配精确,没有就找 4xx.html;如果都没有就触发白页




[](

)@ControllerAdvice+@ExceptionHandler 处理全局异常;


  • [ ] 底层是 ExceptionHandlerExceptionResolver 支持的,处理标注了 ExceptionHandler 注解的异常解析器


//处理整个 web controller 的异常


//表明当前类是集中处理异常的类,可以全局处理异常


@ControllerAdvice


@Slf4j


public class MyException


{


@ExceptionHandler({ArithmeticException.class,NullPointerException.class})


public String handleArithException(Exception e)//这里会自动封装捕获到的异常


{


log.error("异常是:{}",e.getMessage());


//视图解析器拼串,这里可以填发生异常后,需要前往的错误页面


return "login";


}


}





发生错误后,跳转到指定的主页




[](

)@ResponseStatus+自定义异常====》@ResponseStatus:自定义异常


  • [ ] 底层是 ResponseStatusExceptionResolver ,即标注了 ResponseStatus 注解的异常处理解析器

  • [ ] 把 responsestatus 注解的信息底层调用 response.sendError(statusCode, resolvedReason);tomcat 发送的/error


@NoArgsConstructor


@ResponseStatus(reason = "丑拒",value = HttpStatus.FORBIDDEN)


public class YouAreTooAugl extends RuntimeException


{


public YouAreTooAugl(String message)


{


super(message);


}


}





[](

)Spring 底层的异常,如 参数类型转换异常;DefaultHandlerExceptionResolver 处理框架底层的异常。


底层默认由 tomcat 发送/error 请求,sendError 立即结束当前请求


response.sendError(HttpServletResponse.SC_BAD_REQUEST, ex.getMessage());


tomcat 底层有自己的错误页



但是 springmvc 底层有 basicErrorController 专门来处理/error 请求,如果用户没有自定义错误页,那么默认显示错误白页



[](

)自定义实现 异常解析器(HandlerExceptionResolver) 处理异常;可以作为默认的全局异常处理规则


只需要实现顶层异常解析器接口,并放入容器中,便可以让其运作起来,但是自定义异常解析器默认优先级最低


[](

)想要让自定义视图解析器运作,不仅需要让其实现对应接口放入容器中,还需要调整其优先级,默认最低


//数字越小,优先级越高


@Order(value = Ordered.HIGHEST_PRECEDENCE)


@Component


public class CustomerHandlerException implements HandlerExceptionResolver

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
SpringBoot2-----异常处理,快手支付中台java面试题