一、建立统一的Result对象(便于统一处理请求结果)
1、赋予code、msg、data属性
2、data的类型为范型
3、代码参考:
public class Result<T> {
private Integer code;// 错误码
private String msg; // 提示信息
private T data; // 任意对象
gettter()
setter()
}
结果内容格式:
{
code:404,
msg:“地址错误,无法找到方法”,
data:null
}
{
code:404,
msg:“地址错误,无法找到”,
data:{
probe:{...},
mrf:{...}
}
}
二、错误码统一管理(统一管理,方便维护)
1、创建enums包,包下存放各枚举类
2、针对上文示例:创建错误码枚举类ResultCodeEnum
3、代码参考
public enum ResultCodeEnum{
SUCCESS(0,“请求成功”),
SYSTEM_ERROR(-1,“系统错误”),
UNFIND_METHOD(404,“地址错误,无法找到方法”),
PARSE_ERROR(343, “数据解析异常”),
PARSE_TIMEOUT(443,“数据解析超时”),
MISS_CONFIG(302, “数据配置缺失”),
MISS_CELL(303,“数据小区信息缺失”),
;
private Integer code;
private String msg;
ResultCodeEnum(Integer code, String msg){
this.code = code;
this.msg = msg;
}
gettter(); // 枚举类常为引用,一般不需要setter()
}
三、利用AOP思想,统一处理异常
1、创建exception包,包下存放自定义异常
2、创建Aspect包,包下存放AOP切面文件
3、AOP使用方式简介
3-1、pom文件引入依赖
3-2、创建HttpAspect类,加入注解@Aspect 同时需要加@Component放到容器中去
3-3、抽取切点方法,括号内的。。代表任意参数
代码参考
@PointCut(“execution(public * com.test.rumen.demo.controller.*(..))”)
public void cut(){}
@Before(“cut()”)// 在接口执行前,定义了切点就可以不写全地址了
public void doBefore(){
// 可以用作权限校验,表单验证等
// 可以做请求记录,请求地址,ip,参数等等
}
@After(“cut()”)//在接口执行后
public void doAfter(){
}
@AfterReturning(returning = “object”,pointcut=“cut()”)
public void doAfterReturning(object obj){
// 可以做结果记录,结果处理等
}
4、自定义的faultException 加入自己需要定义的内容
代码参考
public class FaultException extends RuntimeException{
private Integer code;
public FaultException (ResultCodeEnum enum){
super(enum.getMsg());
this.code = enum.getCode();
}
gettter()
setter()
}
5、方法执行中如果有异常,可抛出自定义异常
6、新建Exceptionhandle类,处理接到的异常
代码参考
@ControllerAdvice
public class ExceptionHandle{
public Result dealWithResult(Exception e){
if(e instanceof FaultException ){
FaultException exception = (FaultException )e;
return ResultUtil.error(exception.getCode(),exception.getMessage())
}
return ResultUtil.error(-1,"系统错误");
}
}
public class ResultUtil{
public static Result success(Object obj){
Result result = new Result();
result.setCode(0);
result.setMsg("成功");
result.setData(obj);
return result;
}
public static Result error(Integer code, String msg){
Result result = new Result();
result.setCode(code);
result.setMsg(msg);
return result ;
}
}