1创建ServiceCode类
通常是一个枚举类,用于定义服务返回的状态码。
public enum ServiceCode {
/**
* 操作成功
*/
OK(20000),
/**
* 错误:其它异常
*/
ERROR_UNKNOWN(99999);
private Integer value;
ServiceCode(Integer value) {
this.value = value;
}
public Integer getValue() {
return value;
}
2创建返回结果实体类JsonResult.
以便在Web服务调用中能够向客户端返回统一的Json格式数据。
@Data
public class JsonResult {
private Integer state;
private String message;
private Object data;
public static JsonResult OK(){
return OK(null);
}
public static JsonResult OK(Object data){
JsonResult jsonResult = new JsonResult();
jsonResult.setState(ServiceCode.OK.getValue());
jsonResult.setData(data);
return jsonResult;
}
public static JsonResult fail(ServiceCode serviceCode,String message){
JsonResult jsonResult = new JsonResult();
jsonResult.setState(serviceCode.getValue());
jsonResult.setMessage(message);
return jsonResult;
}
public static JsonResult fail(ServiceException e){
return fail(e.getServiceCode(),e.getMessage());
}
}
3自定义异常处理ServiceException
@Getter
public class ServiceException extends RuntimeException{
private ServiceCode serviceCode;
public ServiceException (ServiceCode serviceCode,String message){
super(message);
this.serviceCode=serviceCode;
}
}
4.定义全局异常处理器GlobalExceptionHandler,捕获上面自定义的异常并返回错误状态及信息
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
public GlobalExceptionHandler(){
log.debug("创建全局异常处理器GlobalExceptionHandler");
}
@ExceptionHandler
public JsonResult handlerServiceException(ServiceException e){
log.debug("全局处理器开始处理ServiceException异常");
return JsonResult.fail(e);
}
}
5使用
在需要抛出异常返回给前段的地方加入下面代码
throw new ServiceException(ServiceCode.ERROR_CONFLICT,message);