公共代码开发一

1.状态码定义

根据需求分析阶段可以预见的问题提前做出定义(对执行业务处理逻辑过程中可能出现的成功和失败状态做出的针对性描述),用枚举定义状态码,先定义一部分,业务中遇到新的问题再添加即可。
(1)在com.xiang.forum.common包下创建枚举类型命名为ResultCode
在这里插入图片描述
(2)分析状态码应该返回的值

状态码
返回值

在这里插入图片描述
(3)提供对应的构造方法、get方法及toString()方法

ResultCode(int code, String message) {
    this.code = code;
    this.message = message;
}

public int getCode() {
    return code;
}

public String getMessage() {
    return message;
}

@Override
public String toString() {
    return "返回的状态码相关信息{" +
            "code=" + code +
            ", message='" + message + '\'' +
            '}';
}

(4)开始写不同状态码下的返回值信息
在这里插入图片描述
在这里插入图片描述
这里要注意的是枚举类型调用构造方法时候需要用 ; 结尾,每个调用方法之间用 , 隔开。

SUCCESS(0,"操作成功"),
FAILED(1000,"操作失败"),
FAILED_UNAUTHORIZED(1001,"未授权"),
FAILED_PARAMS_VALIDATE(1002,"参数校验失败"),
FAILED_FORBIDDEN(1003,"禁止访问"),
FAILED_CREATE(1004,"新增失败"),
FAILED_NOT_EXISTS(1005,"资源不存在"),
FAILED_USER_EXISTS(1101,"用户已存在"),
FAILED_USER_NOT_EXISTS(1102,"用户不存在"),
FAILED_LOGIN(1103,"用户名或密码错误"),
FAILED_USER_BANNED(1104,"您已被禁言,请联系管理员,并重新登录"),
FAILED_TWO_PWD_NOT_SAME(1105,"两次输入的密码不一致"),
ERROR_SERVICES(2000,"服务器内部错误"),
ERROR_IS_NULL(2001,"IS NULL")
;

2.返回结果定义

系统实现前后端分离,统一返回JSON格式的字符串,需要定义一个类,包含状态码,描述信息,及返回的结果数据
例如:以一个用户登录查看信息
在这里插入图片描述
(1)在com.xiang.forum.common包下创建AppResult类
在这里插入图片描述
(2)该类的话设置为一个泛型,让它在编译时就被编译成Object类型,定义相关的属性信息
在这里插入图片描述
(3)提供构造方法及get、set方法

构造方法可以返回

状态码+错误信息
状态码+错误信息+返回的数据结果集
 public AppResult(int code, String message) {
        this(code,message,null);
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public AppResult(int code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

(4)定义成功的方法返回

/**
 * 成功返回
 */
public static AppResult success() {
    return new AppResult(ResultCode.SUCCESS.getCode(),ResultCode.SUCCESS.getMessage());
}

public static AppResult success(String message) {
    return new AppResult(ResultCode.SUCCESS.getCode(), message);
}

public static <T> AppResult<T> success(T data) {
    return new AppResult<>(ResultCode.SUCCESS.getCode(),ResultCode.SUCCESS.getMessage(),data);
}

public static <T> AppResult<T> success(String message, T data) {
    return new AppResult<>(ResultCode.SUCCESS.getCode(),message,data);
}

(5)定义失败的方法返回

/**
 * 失败返回
 */

public static AppResult failed() {
    return new AppResult(ResultCode.FAILED.getCode(),ResultCode.FAILED.getMessage());
}

public static AppResult failed(String message) {
    return new AppResult(ResultCode.FAILED.getCode(),message);
}

public static AppResult failed(ResultCode resultCode) {
    return new AppResult(resultCode.getCode(), resultCode.getMessage());
}

3.自定义异常

创建一个异常类,加入状态码与状态信息属性,在我们自己写业务代码里,对于可预见的异常都抛出自定义的异常,可以为异常设置一个定义好的错误。

(1)在com.xiang.forum.exception包下创建ApplicationException
在这里插入图片描述
(2)继承运行时异常类,并自定义异常
在这里插入图片描述
(3)提供构造方法

public ApplicationException (AppResult errorResult) {
    super(errorResult.getMessage());
    this.errorResult = errorResult;
}

4.全局异常处理

使用@ControllerAdvice + @ExceptionHandler注解实现统一异常处理(@ControllerAdvice表示控制器通知类)

(1)在com.xiang.forum.exception包下创建GlobalExceptionHandler类

在这里插入图片描述
(2)添加注解
在这里插入图片描述
(3)实现异常方法

@ResponseBody
    @ExceptionHandler(ApplicationException.class)  //具体要处理那个类异常
    public AppResult applicationExceptionHandler (ApplicationException e) {
//        打印异常信息
        //开始生产之前要删除
        e.printStackTrace();
//        打印日志
        log.error(e.getMessage());
        if(e.getErrorResult() != null) {
            return e.getErrorResult();
        }

//        返回具体的异常信息
        if(e.getMessage() == null || e.getMessage().equals("")) {
            return AppResult.failed(ResultCode.ERROR_SERVICES);
        }
        return AppResult.failed(e.getMessage());
    }

//    自定义异常不能处理的方法
    @ResponseBody
    @ExceptionHandler(Exception.class)
    public AppResult exceptionHandler(Exception e) {
//        打印异常信息
        e.printStackTrace();
//        打印日志
        log.error(e.getMessage());
        if(e.getMessage() == null || e.getMessage().equals("")) {
            return AppResult.failed(ResultCode.ERROR_SERVICES);
        }
        return AppResult.failed(e.getMessage());
    }

(4)测试异常
在TestController中添加以下方法

@GetMapping("/exception")
public AppResult testException() throws Exception {
    throw new Exception("这是一个Exception");
}

@GetMapping("/appexception")
public AppResult testApplicationException() {
    throw new ApplicationException("这是一个ApplicationException");
}

exception测试结果:
在这里插入图片描述
appexception测试结果:
在这里插入图片描述
公共处理基本完成,还有一部分公共处理是API接口自动生成和一些工具类的处理,转下一篇公共代码开发二。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小哈不会玩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值