由于咱们咱们项目开发过程当中遇到各类异常,咱们单独处理的话性能较低,也不灵活,用户显示的的是一堆英文的提示,因此咱们一会儿就干点这种异常,因此咱们须要全局异常处理,java
首先咱们建立一个 异常包,包里面建立一个类数据库
咱们的这个异常处理配合Lombok来配合处理
这个类是咱们的全局异常类,
@Slf4j //lombok中的日志处理注解 @RestControllerAdvice //全局异常 public class GolbalException { @ExceptionHandler(RuntimeException.class) @ResponseBody public String GolbalRuntimeException(RuntimeException e){ log.error("RuntimeException.exception {}",e.getMessage()); return e.getMessage(); } }
@Slf4J(这个注解是Lombok的日志处理注解)
@RestControllerAdvice(这个注解表示的是当前的类是全局异常处理类)
@ExceptionHandle(这个注解描述controller层处理的异常方法)
@ResponseBody(这个注解描述java对象转换json格式)
咱们的数据到客户端里,咱们对这些数据进行状态设计,
假如如今响应的数据包含三种 好比:状态,消息,具体数据等...json
首先咱们要建立新的包,而后包里面建立类segmentfault
@Data @Accessors(chain = true) @NoArgsConstructor @AllArgsConstructor public class viewTable<T> { private Integer state=1;//状态码 表示1 ok,表示0 error private String message;//状态信息 private List<T> rows; //封装查询结果 public viewTable(String message){ this.message=message; } public viewTable(List<T> list) { this.rows=list; } public viewTable(Throwable e){ this.state=0; this.message=e.getMessage(); } }
咱们基于Lombak来实现
@Data @Accessors(chain = true) @NoArgsConstructor @AllArgsConstructor
@Data--这个注解Lombak的注解 自动生成get和set以及tostring
@Accessors--这个注解的做用getter和setter方法的方法名都是属性名
@NoArgsConstructor--生成无参构造
@AllArgsConstructor--生成有参构造服务器
private Integer state=1;//状态码 表示1 ok,表示0 error private String message;//状态信息 private List<T> rows; //封装查询结果
state--状态 给页面发送 1表示正常 0表示错误
message -- 状态信息 成功的话 ok 错误的 报异常
rows -- 咱们显示的数据数据结构
public viewTable(String message){ this.message=message; } public viewTable(List<T> list) { this.rows=list; } public viewTable(Throwable e){ this.state=0; this.message=e.getMessage(); }
第一个 --- 若是返回的结果是字符串
第二个 --- 若是返回的结果是查询的数据
第三个 --- 若是返回的数据是异常性能
这样咱们给页面显示的数据成功封装好了
如今咱们响应数据结构和初级异常处理 接下来咱们把两个都合起来this
@Slf4j //lombok中的日志处理注解 @RestControllerAdvice //全局异常 public class GolbalException<T> { @ExceptionHandler(Exception.class) @ResponseBody public viewTable GolbalRuntimeException(Exception e){ viewTable<T> v=new viewTable<>(); v.setState(0); if (e instanceof BadSqlGrammarException){ v.setMessage("数据库异常"); }else if (e instanceof RuntimeException){ v.setMessage("服务器异常"); } log.error("RuntimeException.exception {}",e.getMessage()); return v; } }
报错的异常