瑞吉外卖中r类的作用

打印 上一主题 下一主题

主题 1816|帖子 1816|积分 5448

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
在瑞吉外卖项目中,R 类通常用于封装响应结果,以便在控制器层返回统一的响应格式。通过利用 R 类,可以确保所有 API 返回的数据格式同等,便于前端分析和处理。这种设计模式在实际开发中非常常见,有助于提高代码的可维护性和可读性。
主要作用


  • 封装响应结果:将响应数据和状态信息封装在一起,形成一个尺度的响应格式。
  • 统一响应格式:确保所有 API 返回的数据格式同等,便于前端分析。
  • 简化控制器层代码:通过 R 类提供的静态方法,可以在控制器层快速返反响应结果,减少重复代码。
示例代码

假设 R 类的定义如下:
  1. package com.itheima.reggie.utils;
  2. import lombok.Data;
  3. import java.util.HashMap;
  4. import java.util.Map;
  5. /**
  6. * 统一响应结果类
  7. */
  8. @Data
  9. public class R<T> {
  10.     private Integer code; // 响应码
  11.     private String msg;   // 响应消息
  12.     private T data;       // 响应数据
  13.     private Map<String, Object> map = new HashMap<>(); // 扩展数据
  14.     // 成功响应
  15.     public static <T> R<T> success(T data) {
  16.         R<T> r = new R<>();
  17.         r.setCode(200);
  18.         r.setMsg("成功");
  19.         r.setData(data);
  20.         return r;
  21.     }
  22.     // 成功响应(无数据)
  23.     public static <T> R<T> success() {
  24.         return success(null);
  25.     }
  26.     // 失败响应
  27.     public static <T> R<T> error(String msg) {
  28.         R<T> r = new R<>();
  29.         r.setCode(500);
  30.         r.setMsg(msg);
  31.         return r;
  32.     }
  33.     // 失败响应(自定义状态码和消息)
  34.     public static <T> R<T> error(Integer code, String msg) {
  35.         R<T> r = new R<>();
  36.         r.setCode(code);
  37.         r.setMsg(msg);
  38.         return r;
  39.     }
  40.     // 添加扩展数据
  41.     public R<T> add(String key, Object value) {
  42.         this.map.put(key, value);
  43.         return this;
  44.     }
  45. }
复制代码
详细解释


  • 属性

    • code:响应码,用于标识请求的状态。
    • msg:响应消息,用于描述请求的结果。
    • data:响应数据,用于返回详细的业务数据。
    • map:扩展数据,用于返回额外的信息。

  • 构造方法

    • R 类没有显式的构造方法,通过静态方法创建实例。

  • 静态方法

    • success(T data):创建一个成功的响应结果,包罗数据。
    • success():创建一个成功的响应结果,不包罗数据。
    • error(String msg):创建一个失败的响应结果,包罗错误消息。
    • error(Integer code, String msg):创建一个失败的响应结果,包罗自定义的状态码和错误消息。

  • 扩展数据

    • add(String key, Object value):添加扩展数据,返回当前对象,支持链式调用。

利用示例

在控制器类中,可以通过 R 类提供的静态方法快速返反响应结果:
  1. package com.itheima.reggie.controller;
  2. import com.itheima.reggie.entity.Employee;
  3. import com.itheima.reggie.service.EmployeeService;
  4. import com.itheima.reggie.utils.R;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.web.bind.annotation.*;
  7. @RestController
  8. @RequestMapping("/employee")
  9. public class EmployeeController {
  10.     @Autowired
  11.     private EmployeeService employeeService;
  12.     @PostMapping("/login")
  13.     public R<Employee> login(@RequestBody Employee employee) {
  14.         // 处理登录逻辑...
  15.         String password = employee.getPassword();
  16.         password = DigestUtils.md5DigestAsHex(password.getBytes(StandardCharsets.UTF_8));
  17.         LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>();
  18.         queryWrapper.eq(Employee::getUsername, employee.getUsername());
  19.         Employee emp = employeeService.getOne(queryWrapper);
  20.         if (emp == null) {
  21.             return R.error("用户不存在");
  22.         }
  23.         if (!emp.getPassword().equals(password)) {
  24.             return R.error("密码不正确");
  25.         }
  26.         if (emp.getStatus() == 0) {
  27.             return R.error("账号已禁用");
  28.         }
  29.         return R.success(emp);
  30.     }
  31.     @PostMapping("/register")
  32.     public R<String> register(@RequestBody Employee employee) {
  33.         // 检查用户名是否已存在
  34.         if (employeeService.checkUsernameExists(employee.getUsername())) {
  35.             return R.error("用户名已存在");
  36.         }
  37.         // 设置默认密码并加密
  38.         employee.setPassword(DigestUtils.md5DigestAsHex("123456".getBytes(StandardCharsets.UTF_8)));
  39.         // 保存新用户
  40.         employeeService.save(employee);
  41.         return R.success("注册成功").add("userId", employee.getId());
  42.     }
  43. }
复制代码
总结

R 类的主要作用是封装响应结果,确保所有 API 返回的数据格式同等。通过利用 R 类提供的静态方法,可以在控制器层快速返反响应结果,减少重复代码,提高代码的可维护性和可读性。

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

举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

商道如狼道

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