在前后台分离开发过程中, 统一响应的格式可以使用枚举类型进行规范开发, 对于不同的错误 / 异常类型可以响应不同的状态码和响应信息.
1, 枚举类型的简单理解: 枚举类型就是包含了有限个枚举对象集合的类, 而枚举对象就是集合中其中一个, 可以使用枚举类名直接调用.
需要注意的是:
1) 枚举类型不能被继承或者实现
2) 枚举类型的构造方法是私有方法, 因为枚举类型的对象已经在类中列举了, 且是有限了, 不能创建对象
2, 枚举类型响应码举例:
- import lombok.ToString;
- @ToString
- public enum CommonCode implements ResultCode {
- SUCCESS(true, 10000, "操作成功!"),
- FAIL(false, 11111, "操作失败!"),
- UNAUTHENTICATED(false, 10001, "此操作需要登陆系统!"),
- UNAUTHORISE(false, 10002, "权限不足, 无权操作!"),
- SERVER_ERROR(false, 99999, "抱歉, 系统繁忙, 请稍后重试!"),
- INVALID_PARAM(false,10003,"非法参数!");
- // private static ImmutableMap<Integer, CommonCode> codes ;
- // 操作是否成功
- boolean success;
- // 操作代码
- int code;
- // 提示信息
- String message;
- private CommonCode(boolean success, int code, String message) {
- this.success = success;
- this.code = code;
- this.message = message;
- }
- @Override
- public boolean success() {
- return success;
- }
- @Override
- public int code() {
- return code;
- }
- @Override
- public String message() {
- return message;
- }
- }
- package com.xuecheng.framework.model.response;
- /**
- * Created by mrt on 2018/3/5.
- * 10000-- 通用错误代码
- * 22000-- 媒资错误代码
- * 23000-- 用户中心错误代码
- * 24000-- cms 错误代码
- * 25000-- 文件系统
- */
- public interface ResultCode {
- // 操作是否成功, true 为成功, false 操作失败
- boolean success();
- // 操作代码
- int code();
- // 提示信息
- String message();
- }
ResultCode 中定义了响应的基本信息, 包含: 是否成功, 响应码, 响应信息, 在多模块开发中可以起到规范的作用.
CommonCode 为各个模块通用的响应码, 包含了通用的异常信息, 也可以为每一个模块定义自定义的响应码, 继承 ResultCode 即可.
使用枚举类型定义响应实现定义:
- @Data
- @ToString
- @NoArgsConstructor
- public class ResponseResult implements Response {
- // 操作是否成功
- boolean success = SUCCESS;
- // 操作代码
- int code = SUCCESS_CODE;
- // 提示信息
- String message;
- public ResponseResult(ResultCode resultCode){
- this.success = resultCode.success();
- this.code = resultCode.code();
- this.message = resultCode.message();
- }
- }
- public interface Response { // 定义常量
- public static final boolean SUCCESS = true;
- public static final int SUCCESS_CODE = 10000;
- }
使用举例 (不需要响应实体对象):
new ResponseResult(CommonCode.FAIL);
对于需要同时返回实体对象和响应码的, 可以继承 ResponseResult 并添加实体类到属性即可
- @Data
- public class PageResult extends ResponseResult {
- Page page;
- public PageResult(ResultCode resultCode,Page page) {
- super(resultCode);
- this.Page = page;
- }
- }
使用举例 (需要响应实现对象):
new ResponseResult(CommonCode.FAIL,new Page());
来源: http://www.bubuko.com/infodetail-3102073.html