加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

如何优雅的处理异常?SpringBoot全局异常与数据校验

发布时间:2019-01-29 15:25:26 所属栏目:优化 来源:JAVA柯尼塞克
导读:要思考的问题 在现在的前后端交互中,通常都规范了接口返回方式,如返回的接口状态(成功|失败)以及要返回的数据在那个字段取,或者说失败了以后提示信息从接口哪里返回,因此,如果想做全局异常,并且异常发生后能准确的返回给前端解析,那么需要异常发
副标题[/!--empirenews.page--]

要思考的问题

在现在的前后端交互中,通常都规范了接口返回方式,如返回的接口状态(成功|失败)以及要返回的数据在那个字段取,或者说失败了以后提示信息从接口哪里返回,因此,如果想做全局异常,并且异常发生后能准确的返回给前端解析,那么需要异常发生时返回给前端的格式与正常失败场景的格式一致。

项目建立

利用idea 工具,很容易的搭建一个SpringBoot项目,要引入的maven依赖如下:

  1. <dependency>  
  2.  <groupId>org.springframework.boot</groupId>  
  3.  <artifactId>spring-boot-starter-validation</artifactId>  
  4. </dependency>  
  5. <dependency>  
  6.  <groupId>org.springframework.boot</groupId>  
  7.  <artifactId>spring-boot-starter-web</artifactId>  
  8. </dependency>  
  9. <dependency>  
  10.  <groupId>org.springframework.boot</groupId>  
  11.  <artifactId>spring-boot-starter-test</artifactId>  
  12.  <scope>test</scope>  
  13. </dependency> 

很简单,除了加入web功能还加入了我们需要用到的JSR-303校验框架。

定义成功失败 返回码

  1. public class Code {  
  2.  /**  
  3.  * 成功  
  4.  */  
  5.  public static int SUCCESSED = 1;  
  6.  /**  
  7.  * 失败  
  8.  */  
  9.  public static int FAILED = -1;  

定义接口返回响应实体

  1. public class Response<T> implements Serializable{  
  2.  /**  
  3.  *   
  4.  */  
  5.  private static final long serialVersionUID = 4250719891313555820L;  
  6.  /**  
  7.  * 返回结果集  
  8.  */  
  9.  private T result;  
  10.  /**  
  11.  * 返回消息  
  12.  */  
  13.  private String msg;  
  14.  /**  
  15.  * 响应码  
  16.  */  
  17.  private Integer code;  
  18.  //set get 略  

全局异常拦截和验证

定义自定义业务异常

  1. public class MyException extends RuntimeException {  
  2.  private static final long serialVersionUID = -5875371379845226068L;  
  3.  public MyException(){}  
  4.  public MyException(String msg){  
  5.  this.msg = msg ;  
  6.  }  
  7.  /**  
  8.  * 异常信息  
  9.  */  
  10.  private String msg ;  
  11.  /**  
  12.  * 具体异常码  
  13.  */  
  14.  private int code = Code.FAILED;  
  15.  get set 略  

编写全局异常控制器并对自定义异常做处理

  1. @ControllerAdvice  
  2. public class GlobalExceptionHandler {  
  3.  private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);  
  4. @ExceptionHandler(value = MyException.class)  
  5. @ResponseBody  
  6. public Response<String> myExceptionErrorHandler(MyException ex) throws Exception {  
  7.  logger.error("myExceptionErrorHandler info:{}",ex.getMessage());  
  8.  Response<String> r = new Response<>();  
  9.  r.setMsg(ex.getMsg());  
  10.  r.setCode(ex.getCode());  
  11.  return r;  

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读