1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > springboot异常处理机制之统一异常处理和自定义异常类

springboot异常处理机制之统一异常处理和自定义异常类

时间:2020-10-28 15:07:26

相关推荐

springboot异常处理机制之统一异常处理和自定义异常类

目录

统一异常处理相关注解`Controller` 层的全局异常统一处理自定义异常类捕捉 `service` 层异常自定义异常类消息类消息类处理工具类统一异常拦截类`service` 层或其他层面抛异常

统一异常处理相关注解

@ControllerAdvice: 声明在类上用于指定该类为控制增强器类,如果想声明返回的结果为RESTFull风格的数据,需要在声明@ExceptionHandler注解的方法上同时加上@ResponseBody@RestControllerAdvice: 声明在类上用于指定该类为控制增强器类。并声明返回的结果为RESTFull风格的数据,无需在声明@ExceptionHandler注解的方法上加@ResponseBody@ExceptionHandler: 声明在方法上用于指定需要统一拦截的异常。例如:@ExceptionHandler(value = Exception.class)

Controller层的全局异常统一处理

返回给前端的是JSON数据

@ControllerAdvicepublic class MyControllerAdvice {// 全局异常捕捉处理@ResponseBody@ExceptionHandler(value = Exception.class)public Map errorHandler(Exception ex) {Map map = new HashMap();map.put("code", 100);map.put("msg", ex.getMessage());return map;}// 拦截捕捉自定义异常 MyException.class@ResponseBody@ExceptionHandler(value = MyException.class)public Map myErrorHandler(MyException ex) {Map map = new HashMap();map.put("code", ex.getCode());map.put("msg", ex.getMsg());return map;}}

基于@ControllerAdvice注解的全局异常统一处理只能针对于Controller层的异常,意思是只能捕获到Controller层的异常,在service层或其他层面的异常是不能捕获的。有的时候,我们需要业务逻辑时抛出自定义异常,这个时候需要自定义业务异常类

自定义异常类捕捉service层异常

返回给前端的是JSON数据

自定义异常类

public class BusinessException extends RuntimeException {private Integer code;public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public BusinessException(Integer code,String message) {super(message);this.code = code;}}

消息类

public class ReturnMessage<T> {private Integer code;//错误码private String message;//提示信息private T data;//返回具体内容public ReturnMessage(Integer code, String message, T data) {super();this.code = code;this.message = message;this.data= data;}// 省略get and set方法}

消息类处理工具类

public class ReturnMessageUtil {// 无异常 请求成功并有具体内容返回public static ReturnMessage<Object> sucess(Object object) {ReturnMessage<Object> message = new ReturnMessage<Object>(0,"sucess",object);return message;}// 无异常 请求成功并无具体内容返回public static ReturnMessage<Object> sucess() {ReturnMessage<Object> message = new ReturnMessage<Object>(0,"sucess",null);return message;}// 自定义错误异常信息public static ReturnMessage<Object> error(Integer code,String msg) {ReturnMessage<Object> message = new ReturnMessage<Object>(code,msg,null);return message;}}

统一异常拦截类

@RestControllerAdvicepublic class ExceptionHandle {private final static Logger logger = LoggerFactory.getLogger(ExceptionHandle.class);@ExceptionHandler(value = Exception.class)public ReturnMessage<Object> handle(Exception exception) {if(exception instanceof BusinessException) {BusinessException businessException = (BusinessException)exception;return ReturnMessageUtil.error(businessException.getCode(), businessException.getMessage());}else {logger.error("系统异常 {}",exception);return ReturnMessageUtil.error(-1, "未知异常"+ exception.getMessage());}}}

service层或其他层面抛异常

throw new BusinessException(100, "这个是自定义异常!")

此时,service层或其他层面的异常就可以捕捉到了,返回给客户端JSON类型的异常数据

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。