java异常分类_springboot 统一异常处理(包含统一数据校验)

1、统一异常处理的优势

在开发中,我们是否遇到过如下两种奇葩现象:

(1)只要没有成功,不管什么原因,前端界面给出提示:服务端错误/异常。哪怕是数据校验不过,也这样提示(嗯,反正先把锅甩出去再说,具体什么原因我才不在乎呢,老子就是这么聪明);

如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:787707172,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。

(2)前端不做任何提示,一切提示信息都来自后端,成功的时候自然没什么,失败的时候,比如将Exception的描述信息(e.getMessage)返回。

现象(1)没什么好说的,直接拖出去枪毙吧;现象(2)先把产品经理宰了再说吧,看起来好像很专业的样子,出了什么问题直接看response返回的结果就知道个大概,研发测试都很方便,只是,大家想过没有,研发测试运维的问题,凭什么要用户买单,你见过淘宝京东有时候出了问题给你类似于“out of memory”的异常提示吗?

那么异常统一处理有什么好处呢?

提高用户体验;

业务逻辑和异常处理逻辑解耦;

对异常进行分类统一处理,减少冗余代码;

便于代码风格统一,并且更优雅(比如参数校验的时候,得写很多if else,并且不同的人写法不一致);

2、统一异常处理的实现

2.1 springboot的默认异常处理

Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用来展示异常内容。

比如:

@RestControllerpublic class Test { @RequestMapping(value = {"/test"},method = RequestMethod.GET) public String test(@RequestParam("id")Integer id){ return "id:"+id; }}

运行后访问结果如下:

edecd0d0e1f342e6b87f5b66c6daae8f

这种直接返回错误页面,对于用户而言,显然是太不友好了哈!

2.2 统一异常处理

java异常详解

首先,定义自己的异常类,随便起个名字哈,MyException.java

@Data

public class MyException extends Exception{  private Integer code; private String Message;  public MyException(Integer code,String Message) { this.code = code; this.Message = Message; }}

然后定义自己的异常处理类,ExceptionHandle.java

如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:787707172,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。

如果返回的对象是JSON的话,可以用@RestControllerAdvice

@ControllerAdvice

public class ExceptionHandle {  private final static Logger logger = LoggerFactory.getLogger(ExceptionHandle.class);  @ExceptionHandler(value = Exception.class) @ResponseBody public Result handle(Exception e) { if (e instanceof MyException) { MyException myException = (MyException) e; return ResultUtil.error(boyException.getCode(), boyException.getMessage()); }else { logger.error("【系统异常】{}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值