一直以来我就是想统一下异常,觉得程序中到处抛异常时真的烦恼,通过一中午简单了解,终于做出了一个简单的版本。
/**
*
*/
package learn.until;
import learn.until.staticdata.RestCode;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 自定义异常
*
* @Author: ljg 2020年3月12日 上午10:45:17
*
* @Desc: <p>
* </p>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class HYException extends Exception {
/**
* 序列化ID
*/
private static final long serialVersionUID = 1L;
private int code;
public HYException(RestCode restCode) {
super(restCode.getMsg());
this.code = restCode.getCode();
}
}
上面的代码我只做了一个实例,但是这个实例其实很不方便的,因为参数定义为枚举类型,但是你不可能每一种异常都在枚举类中新增,所以不是很实用,后面我就再加了一个生成实例的方式,这样就比较通用了。
public HYException(int code, String msg) {
super(msg);
this.code = code;
}
当然这个还是很多扩展方式的,我刚开始学习,先列举这么 简单的方式。
后面我还加了一个公共的异常类,为什么要加这个公共的异常类,原因很简单,为的就是control层返回到前端是少些几行代码,统一下异常。
/**
*
*/
package learn.until;
import learn.until.staticdata.RestCode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 捕获异常类
*
* @Author: ljg 2020年3月12日 上午10:37:44
*
* @Desc:
* <p>
* 捕获异常的类,返回信息给浏览器,可以自定义返回的code,msg等信息
* </p>
*/
public class ExceptionHandleUtil {
private final static Logger logger = LoggerFactory.getLogger(ExceptionHandleUtil.class);
/**
* 处理异常
*
* @param <T> 泛型
*
* @Author ljg 2020年3月12日 上午10:41:40
* @param e 异常
* @return 返回异常处理类
*/
public static <T> RestResponse<T> handle(Exception e) {
logger.error("ExceptionHandleUtil", e);
if (e instanceof HYException) {
HYException hyException = (HYException) e;
return RestResposeUtil.error(hyException.getCode(), hyException.getMessage());
} else {
return RestResposeUtil.error(RestCode.UNDEFINED_ERROR.getCode(), RestCode.UNDEFINED_ERROR.getMsg());
}
}
}
使用control层,就是在try–catch后将异常传个这个类,统一返回数据对象,方便简单
public RestResponse<String> login(@RequestBody UserInfoCond userInfoCond) {
RestResponse<String> response = null;
try {
response = RestResposeUtil.createResponse(RestCode.SUCCESS, loginService.login(userInfoCond));
} catch (Exception e) {
response = ExceptionHandleUtil.handle(e);
}
return response;
}