| 副标题[/!--empirenews.page--] 要思考的问题 在现在的前后端交互中,通常都规范了接口返回方式,如返回的接口状态(成功|失败)以及要返回的数据在那个字段取,或者说失败了以后提示信息从接口哪里返回,因此,如果想做全局异常,并且异常发生后能准确的返回给前端解析,那么需要异常发生时返回给前端的格式与正常失败场景的格式一致。 项目建立 利用idea 工具,很容易的搭建一个SpringBoot项目,要引入的maven依赖如下: <dependency>   <groupId>org.springframework.boot</groupId>   <artifactId>spring-boot-starter-validation</artifactId>  </dependency>  <dependency>   <groupId>org.springframework.boot</groupId>   <artifactId>spring-boot-starter-web</artifactId>  </dependency>  <dependency>   <groupId>org.springframework.boot</groupId>   <artifactId>spring-boot-starter-test</artifactId>   <scope>test</scope>  </dependency> 
 很简单,除了加入web功能还加入了我们需要用到的JSR-303校验框架。 定义成功失败 返回码 public class Code {   /**   * 成功   */   public static int SUCCESSED = 1;   /**   * 失败   */   public static int FAILED = -1;  } 
 定义接口返回响应实体 public class Response<T> implements Serializable{   /**   *    */   private static final long serialVersionUID = 4250719891313555820L;   /**   * 返回结果集   */   private T result;   /**   * 返回消息   */   private String msg;   /**   * 响应码   */   private Integer code;   //set get 略  } 
 全局异常拦截和验证
 定义自定义业务异常 public class MyException extends RuntimeException {   private static final long serialVersionUID = -5875371379845226068L;   public MyException(){}   public MyException(String msg){   this.msg = msg ;   }   /**   * 异常信息   */   private String msg ;   /**   * 具体异常码   */   private int code = Code.FAILED;   get set 略  
 编写全局异常控制器并对自定义异常做处理 @ControllerAdvice  public class GlobalExceptionHandler {   private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);  @ExceptionHandler(value = MyException.class)  @ResponseBody  public Response<String> myExceptionErrorHandler(MyException ex) throws Exception {   logger.error("myExceptionErrorHandler info:{}",ex.getMessage());   Response<String> r = new Response<>();   r.setMsg(ex.getMsg());   r.setCode(ex.getCode());   return r;  } 
 (编辑:宣城站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |