• Java项目构建基础之统一结果


    统一结果返回

    目前的前后端开发大部分数据的传输格式都是json,因此定义一个统一规范的数据格式有利于前后端的交互与UI的展示。

    统一结果的一般形式

    • 是否响应成功;

    • 响应状态码;

    • 状态码描述;

    • 响应数据

    • 其他标识符

    结果类枚举

    前三者可定义结果枚举,如:success,code,message:

    @Getter
    public enum ResultCodeEnum {
        SUCCESS(true,20000,"成功"),
        UNKNOWN_ERROR(false,20001,"未知错误"),
        PARAM_ERROR(false,20002,"参数错误");
    
        // 响应是否成功
        private Boolean success;
        // 响应状态码
        private Integer code;
        // 响应信息
        private String message;
    
        ResultCodeEnum(boolean success, Integer code, String message) {
            this.success = success;
            this.code = code;
            this.message = message;
        }
    }

    统一结果类

    第5个属于自定义返回,利用前4者可定义统一返回对象

    注意:

    • 外界只可以调用统一返回类的方法,不可以直接创建,因此构造器私有;

    • 内置静态方法,返回对象;

    • 为便于自定义统一结果的信息,建议使用链式编程,将返回对象设类本身,即return this;

    • 响应数据由于为json格式,可定义为JsonObject或Map形式;

    @Data
    public class R {
        private Boolean success;
    
        private Integer code;
    
        private String message;
    
        private Map<String, Object> data = new HashMap<>();
    
        // 构造器私有
        private R(){}
    
        // 通用返回成功
        public static R ok() {
            R r = new R();
            r.setSuccess(ResultCodeEnum.SUCCESS.getSuccess());
            r.setCode(ResultCodeEnum.SUCCESS.getCode());
            r.setMessage(ResultCodeEnum.SUCCESS.getMessage());
            return r;
        }
    
        // 通用返回失败,未知错误
        public static R error() {
            R r = new R();
            r.setSuccess(ResultCodeEnum.UNKNOWN_ERROR.getSuccess());
            r.setCode(ResultCodeEnum.UNKNOWN_ERROR.getCode());
            r.setMessage(ResultCodeEnum.UNKNOWN_ERROR.getMessage());
            return r;
        }
    
        // 设置结果,形参为结果枚举
        public static R setResult(ResultCodeEnum result) {
            R r = new R();
            r.setSuccess(result.getSuccess());
            r.setCode(result.getCode());
            r.setMessage(result.getMessage());
            return r;
        }
    
        /**------------使用链式编程,返回类本身-----------**/
    
        // 自定义返回数据
        public R data(Map<String,Object> map) {
            this.setData(map);
            return this;
        }
    
        // 通用设置data
        public R data(String key,Object value) {
            this.data.put(key, value);
            return this;
        }
    
        // 自定义状态信息
        public R message(String message) {
            this.setMessage(message);
            return this;
        }
    
        // 自定义状态码
        public R code(Integer code) {
            this.setCode(code);
            return this;
        }
    
        // 自定义返回结果
        public R success(Boolean success) {
            this.setSuccess(success);
            return this;
        }
    }

    控制层返回

    视图层使用统一结果:

    @RestController
    @RequestMapping("/api/v1/users")
    public class TeacherAdminController {
    
        @Autowired
        private UserService userService;
    
        @GetMapping
        public R list() {
            List<Teacher> list = teacherService.list(null);
            return R.ok().data("itms", list).message("用户列表");
        }
    }    

    json结果

    {
      "success": true,
      "code": 20000,
      "message": "查询用户列表",
      "data": {
        "itms": [
          {
            "id": "1",
            "username": "admin",
            "role": "ADMIN",
            "deleted": false,
            "gmtCreate": "2019-12-26T15:32:29",
            "gmtModified": "2019-12-26T15:41:40"
          },{
            "id": "2",
            "username": "zhangsan",
            "role": "USER",
            "deleted": false,
            "gmtCreate": "2019-12-26T15:32:29",
            "gmtModified": "2019-12-26T15:41:40"
          }
        ]
      }
    }
    View Code
  • 相关阅读:
    2018北京网络赛 G The Mole /// 分块暴力 点线距离
    POJ 3525 /// 半平面交 模板
    买不到的数目 /// 结论公式 oj26316
    Number Sequence /// oj21456
    Round Numbers /// 组合计数 oj21455
    POJ 1265 /// 皮克定理+多边形边上整点数+多边形面积
    fread 快速读入 (神奇挂!)
    HDU6395(分段+矩阵快速幂)
    如何得出保留某位小数,不进行四舍五入
    Codeforces1114 D. Flood Fill (DP)(整个区间染成同色)
  • 原文地址:https://www.cnblogs.com/gjq1126-web/p/12597669.html
Copyright © 2020-2023  润新知