java中统一返回前端格式,统一结果处理返回

打印 上一主题 下一主题

主题 1768|帖子 1768|积分 5304

统一结果处理

为什么要利用统一结果?

1、大部分前后端项目采取 JSON 格式举行数据交互,界说一个统一的数据规范,有利于前后台的交互、以及信息处理。
2、Java后端开发项目时,必要给前端传一些数据,可以直接将一个 List 或者 Map 返回给前端,但是如许会显得很乱,并且偶然候前端必要的不仅仅只是数据,大概还有一些错误码、错误信息等,这时就必要一种规范的数据格式传到前端。
返回格式的属性阐明



  • success: true/false,是否响应成功,设置成 Boolean 范例。
  • code: 200/400/500等,响应状态码。设置成 Integer 范例。
  • message: 访问成功/体系非常等,状态码描述,设置成 String 范例。
  • data: 处理得数据,响应数据,设置成 HashMap 范例。
下面举出来一个 Spring Boot 项目中,通过接口返回给前端的结果格式示例:
  1. // 举例:返回结果样式
  2. {
  3.   "success": true,
  4.   "code": 200,
  5.   "message": "查询用户列表",
  6.   "data": {
  7.     "itms": [
  8.       {
  9.         "id": "1",
  10.         "username": "admin",
  11.         "role": "ADMIN",
  12.         "createTime": "2020-4-24T15:32:29",
  13.         "modifiedTime": "2020-4-24T15:41:40"
  14.       },{
  15.         "id": "2",
  16.         "username": "zhangsan",
  17.         "role": "USER",
  18.         "createTime": "2020-4-24T15:32:29",
  19.         "modifiedTime": "2020-4-24T15:41:40"
  20.       }
  21.     ]
  22.   }
  23. }
复制代码
统一结果返回类如何界说



  • 构造器私有,不允许举行实例化,但提供静态方法:ok、error 返回一个实例

    • ok:返回一个 成功操作 的实例对象
    • error:返回一个 失败操作 的实例对象

  • 采取链式调用(即:方法返回对象为其自己,return this)----> 下面代码中涉及到
统一结果返回类:
  1. @Data
  2. public class Result {
  3.     private Boolean success;
  4.     private Integer code;
  5.     private String message;
  6.     private Map<String, Object> data = new HashMap<>();
  7.    
  8.     // 默认私有构造器
  9.     private Result(){
  10.         
  11.     }
  12.    
  13.     // 自定义构造器
  14.     private Result(Boolean success, Integer code, String message){
  15.         this.success = success;
  16.         this.code = code;
  17.         this.message = message;
  18.     }
  19.    
  20.    
  21.    
  22.     // 返回一个默认的 成功操作 的实例对象,默认响应状态码 200
  23.     public static Result ok(){
  24.         // 使用 HttpStatus 的常量表示响应状态码,这个需要导入 httpcore 依赖
  25.         return new Result(true, HttpStatus.SC_OK, "success");
  26.     }
  27.    
  28.     // 返回一个自定义 成功操作 的实例对象
  29.     public static Result ok(Boolean success, Integer code, String message) {
  30.         return new Result(success, code, message);
  31.     }
  32.    
  33.    
  34.    
  35.     // 返回一个默认的 失败操作 的结果,默认响应状态码为 500
  36.     public static Result error() {
  37.         return new Result(false, HttpStatus.SC_INTERNAL_SERVER_ERROR, "error");
  38.     }
  39.    
  40.     // 返回一个自定义 失败操作 的实例对象
  41.     public static Result error(Boolean success, Integer code, String message) {
  42.         return new Result(success, code, message);
  43.     }
  44.    
  45.    
  46.    
  47.     // 自定义响应是否成功
  48.     public Result success(Boolean success) {
  49.         this.setSuccess(success);
  50.         return this;
  51.     }
  52.    
  53.     // 自定义响应状态码
  54.     public Result code(Integer code) {
  55.         this.setCode(code);
  56.         return this;
  57.     }
  58.    
  59.     // 自定义响应消息
  60.     public Result message(String message) {
  61.         this.setMessage(message);
  62.         return this;
  63.     }
  64.    
  65.     // 自定义响应数据,一次设置一个 map 集合
  66.     public Result data(Map<String, Object> map) {
  67.         this.data.putAll(map);
  68.         return this;
  69.     }
  70.    
  71.     // 通用设置响应数据,一次设置一个 key - value 键值对
  72.     public Result data(String key, Object value) {
  73.         this.data.put(key, value);
  74.         return this;
  75.     }
  76. }
复制代码
代码阐明:
1、统一结果返回类。方法采取链式调用的写法(即返回类自己 return this)。
2、构造器私有,不允许举行实例化,但提供静态方法 ok、error 返回一个实例。
3、静态方法阐明:


  • ok: 返回一个 成功操作 的结果(实例对象)。
  • error: 返回一个 失败操作 的结果(实例对象)。
4、平凡方法阐明:


  • success: 用于自界说响应是否成功
  • code: 用于自界说响应状态码
  • message: 用于自界说响应消息
  • data: 用于自界说响应数据
5、依赖信息阐明:


  • 此处利用 @Data 注解,需导入 lombok 相关依赖文件。
  • 利用 HttpStatus 的常量表示 响应状态码,需导入 httpcore 相关依赖文件。
   留意:利用 HttpStatus 时,要加这个依赖:
  1. <dependency>
  2.     <groupId>org.apache.httpcomponents</groupId>
  3.     <artifactId>httpcore</artifactId>
  4.     <version>4.4.13(版本号)</version>
  5. </dependency>
  6. <dependency>
  7.     <groupId>org.projectlombok</groupId>
  8.     <artifactId>lombok</artifactId>
  9.     <version>1.18.12</version>
  10.     <scope>provided</scope>
  11. </dependency>
复制代码
4、利用:修改某个 controller 如下所示:
  1. @GetMapping("selectOne")
  2. public Result selectOne(Integer id) {
  3.     Emp emp = this.empService.queryById(id);
  4.     if (emp == null) {
  5.         return Result.error().message("用户不存在");
  6.     }
  7.     return Result.ok().data("items", emp).message("查询成功");
  8. }
复制代码

  
4.1 成功:若查询用户成功,调用 ok 返回查询到的结果。
  1. {
  2.     "success": true,
  3.     "code": 200,
  4.     "message": "查询成功",
  5.     "data": {
  6.         "items": {
  7.             "id": 1,
  8.             "name": "tom",
  9.             "salary": 6000.0,
  10.             "age": 20,
  11.             "email": "tom@163.com"
  12.         }
  13.     }
  14. }
复制代码
4.2 失败:若查询用户失败,调用 error 返回查询失败信息。
  1. {
  2.     "success": false,
  3.     "code": 500,
  4.     "message": "用户不存在",
  5.     "data": {}
  6. }
复制代码
  至此,文章结束!!!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

汕尾海湾

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表