这里教大家如何优雅的处理异常
1.定义一个全局异常处理类,里面可以自己添加想处理的异常.
/**
* @Author:PascalLee
* 全局异常处理类
*/
@RestControllerAdvice
public class GlobalExceptionHandler {
/**
* 处理空指针的异常
*
* @param req
* @param e
* @return
*/
@ExceptionHandler(value = NullPointerException.class)
public ResultMessage exceptionHandler(HttpServletRequest req, NullPointerException e) {
return ResultMessage.failure("空指针异常..");
}
/**
* 处理自定义的业务异常
*
* @param req
* @param e
* @return
*/
@ExceptionHandler(value = BizException.class)
public ResultMessage bizExceptionHandler(HttpServletRequest req, BizException e) {
return ResultMessage.failure("自定义异常..");
}
/**
* 处理其他异常
*
* @param req
* @param e
* @return
*/
@ExceptionHandler(value = Exception.class)
public ResultMessage exceptionHandler(HttpServletRequest req, Exception e) {
return ResultMessage.failure("运行期异常..");
}
}
2.自定义业务异常处理
/**
* @Author:PascalLee
* 自定义业务异常
*/
@Data
public class BizException extends RuntimeException {
/**
* 错误码
*/
protected Integer errorCode;
/**
* 错误信息
*/
protected String errorMsg;
}
3.模拟service层中的异常
@Service
public class PropertyService {
public String getCustomPropertyFileData() {
//自定义异常
//if(true){
// throw new BizException(1,"error");
//}
//空指针异常
//String message = null;
//System.out.println(message.charAt(0));
//运行期异常
System.out.println(1/0);
return null;
}
}
4.自己使用的responce的实体类,比较规范的响应实体类,推荐给大家
/**
* 用于返回给页面的结果数据信息
*/
@Data
public class ResultMessage implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 返回的消息
*/
private String msg;
/**
* 处理结果代码
*/
private String code;
/**
* 返回的数据
*/
private Object data;
/**
* 默认构造函数
*/
public ResultMessage() {
}
/**
* 构造函数
*
* @param success 是否成功
* @param data 返回到前端的数据
*/
public ResultMessage(String code, Object data) {
this.code = code;
this.data = data;
}
/**
* 构造函数
*
* @param success 是否成功
*/
protected ResultMessage(String code) {
this.code = code;
}
/**
* 构造函数
*
* @param success 是否成功
* @param msg 消息
*/
protected ResultMessage(String code, String msg) {
this.code = code;
this.msg = msg;
}
/**
* 构造函数
*
* @param success 是否成功
* @param msg 消息
* @param data 返回到前端的数据
*/
protected ResultMessage(String code, String msg, Object data) {
this.code = code;
this.msg = msg;
this.data = data;
}
// ************** 静态方法:得到ResultMessag实例 *********************
/**
* 产生处理成功的ResultMessage对象
*
* @return ResultMessage
*/
public static ResultMessage success() {
return new ResultMessage("1");
}
public static ResultMessage success(String str) {
return new ResultMessage("1", str);
}
/**
* 产生处理成功的ResultMessage对象
*
* @param data 需要返回到前端的数据
* @return ResultMessage
*/
public static ResultMessage success(Object data) {
return new ResultMessage("1", data);
}
/**
* 产生处理失败的ResultMessage对象
*
* @return ResultMessage
*/
public static ResultMessage failure() {
return new ResultMessage("-1", null);
}
/**
* 产生处理失败的ResultMessage对象
*
* @return ResultMessage
*/
public static ResultMessage failure(String str) {
return new ResultMessage("-1", str);
}
/**
* 产生处理失败的ResultMessage对象
*
* @param data 需要返回到前端的数据
* @return ResultMessage
*/
public static ResultMessage failure(Object data) {
return new ResultMessage("-1", data);
}
/**
* 产生ResultMessage对象
*
* @param success 是否成功
* @return ResultMessage
*/
public static ResultMessage newInstance(String code) {
return new ResultMessage(code);
}
/**
* 产生ResultMessage对象
*
* @param success 是否成功
* @param msg 消息
* @return ResultMessage
*/
public static ResultMessage newInstance(String code, String msg) {
return new ResultMessage(code, msg);
}
/**
* 产生ResultMessage对象
*
* @param success 是否成功
* @param msg 消息
* @param data 返回的数据
* @return
*/
public static ResultMessage newInstance(String code, String msg, Object data) {
return new ResultMessage(code, msg, data);
}
}
共勉!