1、返回实体对象的创建
首先,一个项目中为了清晰、统一的处理返回信息,所以需要封装一个返回对象,这个对象需要有响应code码、响应code码对应的描述信息、以及返回数据对象。下面我们来看一下具体代码:
public class ApiResult implements Serializable {
/**
* 响应码
*/
private String resultCode;
/**
* 响应描述
*/
public String msg;
/**
* 返回数据对象
*/
public Map<String, Object> data = new HashMap<>();
public ApiResult() {
this.resultCode = ApiResponse.SUCCESS.getResCode();
this.msg = ApiResponse.SUCCESS.getResDesc();
}
public ApiResult(Map<String, Object> data) {
this.resultCode = ApiResponse.SUCCESS.getResCode();
this.msg = ApiResponse.SUCCESS.getResDesc();
this.data = data;
}
public ApiResult(ApiResponse resp, Map<String, Object> data) {
this.resultCode = resp.getResCode();
this.msg = resp.getResDesc();
this.data = data;
}
public ApiResult(ApiResponse resp, Map<String, Object> data, String msg) {
this.resultCode = resp.getResCode();
this.msg = msg;
this.data = data;
}
}
2、全局异常配置
当出现异常情况时,要作为一个统一的异常类来处理相关信息。所以才会出现全局异常类配置。具体代码如下:
public class BaseException extends Exception {
/**
* 响应完整信息
*
* */
private ApiResponse response;
public BaseException(Throwable cause) {
super(cause);
}
public BaseException(String message) {
super(message);
}
}
3、全局异常配置完成后,则需要配置一个全局异常处理类
异常类处理完成后,需要有一个异常处理类来完成对各种异常的统一处理,注解标记出了此类是一个Handler,然后下面的ExceptionHandler来捕获各种异常,我这里只捕获了自己定义的异常,如果有多种异常你可以每一个捕获,然后去自定义返回信息节课完成全局统一异常的处理信息。
具体代码如下
@RestControllerAdvice
public class TyBusExceptionHandler {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@ExceptionHandler(BaseException.class)
@ResponseBody
public ApiResult handle(BaseException e) {
logger.error("错误信息是:{}", e);
ApiResult resp = null;
ApiResponse response = e.getResponse();
if (response == null || StringUtils.isEmpty(response.getReturnMsg())) {
resp = new ApiResult(e.getResponse(), null, e.getMessage());
} else {
resp = new ApiResult(e.getResponse(), null);
}
return resp;
}
}
至此全局异常处理类及相关配置已完成