瑞吉外卖中r类的作用

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

主要作用

  1. 封装响应结果:将响应数据和状态信息封装在一起,形成一个标准的响应格式。
  2. 统一响应格式:确保所有 API 返回的数据格式一致,便于前端解析。
  3. 简化控制器层代码:通过 R 类提供的静态方法,可以在控制器层快速返回响应结果,减少重复代码。

示例代码

假设 R 类的定义如下:

package com.itheima.reggie.utils;import lombok.Data;import java.util.HashMap;
import java.util.Map;/*** 统一响应结果类*/
@Data
public class R<T> {private Integer code; // 响应码private String msg;   // 响应消息private T data;       // 响应数据private Map<String, Object> map = new HashMap<>(); // 扩展数据// 成功响应public static <T> R<T> success(T data) {R<T> r = new R<>();r.setCode(200);r.setMsg("成功");r.setData(data);return r;}// 成功响应(无数据)public static <T> R<T> success() {return success(null);}// 失败响应public static <T> R<T> error(String msg) {R<T> r = new R<>();r.setCode(500);r.setMsg(msg);return r;}// 失败响应(自定义状态码和消息)public static <T> R<T> error(Integer code, String msg) {R<T> r = new R<>();r.setCode(code);r.setMsg(msg);return r;}// 添加扩展数据public R<T> add(String key, Object value) {this.map.put(key, value);return this;}
}

详细解释

  1. 属性

    • code:响应码,用于标识请求的状态。
    • msg:响应消息,用于描述请求的结果。
    • data:响应数据,用于返回具体的业务数据。
    • map:扩展数据,用于返回额外的信息。
  2. 构造方法

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

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

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

使用示例

在控制器类中,可以通过 R 类提供的静态方法快速返回响应结果:

package com.itheima.reggie.controller;import com.itheima.reggie.entity.Employee;
import com.itheima.reggie.service.EmployeeService;
import com.itheima.reggie.utils.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/employee")
public class EmployeeController {@Autowiredprivate EmployeeService employeeService;@PostMapping("/login")public R<Employee> login(@RequestBody Employee employee) {// 处理登录逻辑...String password = employee.getPassword();password = DigestUtils.md5DigestAsHex(password.getBytes(StandardCharsets.UTF_8));LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(Employee::getUsername, employee.getUsername());Employee emp = employeeService.getOne(queryWrapper);if (emp == null) {return R.error("用户不存在");}if (!emp.getPassword().equals(password)) {return R.error("密码不正确");}if (emp.getStatus() == 0) {return R.error("账号已禁用");}return R.success(emp);}@PostMapping("/register")public R<String> register(@RequestBody Employee employee) {// 检查用户名是否已存在if (employeeService.checkUsernameExists(employee.getUsername())) {return R.error("用户名已存在");}// 设置默认密码并加密employee.setPassword(DigestUtils.md5DigestAsHex("123456".getBytes(StandardCharsets.UTF_8)));// 保存新用户employeeService.save(employee);return R.success("注册成功").add("userId", employee.getId());}
}

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/14986.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

R门 - rust第一课陈天 -内存知识学习笔记

内存 #mermaid-svg-1NFTUW33mcI2cBGB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-1NFTUW33mcI2cBGB .error-icon{fill:#552222;}#mermaid-svg-1NFTUW33mcI2cBGB .error-text{fill:#552222;stroke:#552222;}#merm…

品融电商:新形势下电商平台如何助力品牌长期经营

品融电商&#xff1a;新形势下电商平台如何助力品牌长期经营 在过去几年中&#xff0c;随着内容电商的兴起&#xff0c;一批新兴品牌通过精准的内容种草和互动营销迅速打开市场&#xff0c;实现了从“0到1”的品牌起步阶段。比如&#xff0c;新品牌SIINSIIN通过小红书等内容电商…

C语言中操作符详解(下)

C语言中操作符详解_下 放在最前面的1、条件操作符&#xff08;三目操作符&#xff09;1.1、定义1.2、举例分析&#xff1a;&#xff08;上代码&#xff09;输出结果&#xff1a;代码的解释&#xff1a; 2、逗号表达式2.1、定义2.2、举例分析&#xff1a;&#xff08;上代码&…

渐进式JavaScript框架Vue 3 入门

目录 前言1. Vue 3 的基础入门1.1 什么是 Vue.js1.2 局部使用 Vue 2. Vue 3 的基本配置2.1 准备 HTML 页面并引入 Vue 模块2.2 创建 Vue 应用实例 3. Vue 的数据绑定与界面渲染3.1 插值表达式 4. 常用指令详解4.1 v-for 指令&#xff1a;列表渲染4.2 v-bind 指令&#xff1a;绑…

LeetCode105.从前序与中序遍历构造二叉树

题目要求 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 提示: 1 < preorder.length < 3000inorder.length preorder.length-3000 < pr…

css-50 Projects in 50 Days(3)

html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>旋转页面</title><link rel"sty…

基于STM32单片机多路无线射频抢答器

目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 1.电路图采用Altium Designer进行设计&#xff1a; 三、实物设计图 四、程序源代码设计 五、资料内容 前言 随着科技的不断进步和各类竞赛活动的日益增多&#xff0c;抢答器作为一种重要的竞…

【Linux】多线程(中)

目录 一、线程互斥 1.1 互斥概念 1.2 互斥量mutex 1.3 互斥量相关API &#xff08;1&#xff09;初始化互斥量 &#xff08;2&#xff09;销毁互斥量 &#xff08;3&#xff09;互斥量加锁和解锁 1.4 互斥量原理 1.5 重入和线程安全 二、死锁 2.1 概念 2.2 造成死锁…

光控资本:什么是庄家洗盘和出货?各有什么特征?

什么是庄家洗盘和出货&#xff1f; 庄家洗盘&#xff1a;庄家洗盘是指庄家使用其筹码优势来作出一些K线图形&#xff0c;进而引起市场上的散户投资者的惊惧&#xff0c;然后洗掉散户手中的起浮筹码&#xff0c;使盘面更加安稳&#xff0c;减轻股票后期拉升压力的行为。 庄家洗…

【Vue3】知识汇总,附详细定义和源码详解,后续出微信小程序项目(5)

快速跳转&#xff1a; 我的个人博客主页&#x1f449;&#xff1a;Reuuse博客 新开专栏&#x1f449;&#xff1a;Vue3专栏 参考文献&#x1f449;&#xff1a;uniapp官网 免费图标&#x1f449;&#xff1a;阿里巴巴矢量图标库 ❀ 感谢支持&#xff01;☀ 前情提要 &#x…

5ire:开源AI工具的新纪元

抖知书老师推荐&#xff1a; 在AI技术飞速发展的今天&#xff0c;5ire作为一款开源的AI工具&#xff0c;已经悄然改变了我们对传统AI工具的认知。那些曾对AI技术抱有疑虑的人们&#xff0c;现在可以更加自信地拥抱这一变革。原本担心工作会被AI取代的忧虑逐渐平息&#xff0c;…

Unity图形学之Shader2.0矩阵变换

1.将物体坐标系 变换 到世界坐标系&#xff1a; Unity3D里面矩阵是左乘的 P(世界) M(物体到世界的变换矩阵) * P(物体) 规律&#xff1a;3D变换 首先将物体坐标系变换到世界 2.将 世界坐标 变换 到相机坐标 P(相机) M(世界到相机的变换矩阵) * P(世界) using System.Col…

网上商城系统设计与Spring Boot框架

3 系统分析 当用户确定开发一款程序时&#xff0c;是需要遵循下面的顺序进行工作&#xff0c;概括为&#xff1a;系统分析–>系统设计–>系统开发–>系统测试&#xff0c;无论这个过程是否有变更或者迭代&#xff0c;都是按照这样的顺序开展工作的。系统分析就是分析系…

JavaWeb-JSP

可以写java代码也前端代码 jsp本来就是Serclet jsp脚本 EL表达式 要将jsp获取的东西放到域中 转发到/el-demo.jsp中 jsp中用&#xffe5;{}获取域中的信息 JSTL标签 c&#xff1a;if标签 jsp中 c:forEach标签 MVC 查询所有 在service层实现 Servlet代码&#xff1a;1.创建Br…

Area-Composition模型部署指南

一、介绍 本模型可以通过输入不同的提示词&#xff0c;然后根据各部分提示词进行融合生成图片。如下图&#xff1a; 此图像包含 4 个不同的区域&#xff1a;夜晚、傍晚、白天、早晨 二、部署 环境要求&#xff1a; 最低显存&#xff1a;10G 1. 部署ComfyUI 本篇的模型部署…

经典文献阅读之--DROID-SLAM(完美的深度学习slam框架)

0. 简介 深度学习和SLAM现在结合越来越紧密了&#xff0c;但是实际上很多时候深度学习只会作为一个block放在slam系统中。而很多深度学习slam算法&#xff0c;在slam这边的性能都不是太好&#xff0c;尤其是回环和全局优化这块。因为有一些深度学习的工作就不太适合做回环检测…

【windows 下使用 tree】

windows git bash 下使用 tree 下载tree二进制文件 https://gnuwin32.sourceforge.net/packages/tree.htm 解压缩找到 tree.exe 扔进git bash的命令目录 C:\Program Files\Git\usr\bin 打开测试

GxtWaitCursor:Qt下基于RAII的鼠标等待光标类

有时我们需要以阻塞的方式执行一点耗时的操作&#xff0c;这时需要主窗口光标呈现忙状态&#xff0c;GxtWaitCursor正是为此设计&#xff1b;重载的构造函数&#xff0c;可以让光标呈现忙状态一定时间后自动恢复。 GxtWaitCursor.h #pragma once#include <QObject>// // …

通过Python,Tkinter,文本文件,Openpyxl。实现【图书馆管理系统实现技术】

图书馆管理系统 目录 项目概述类定义 -Book类 -Library类书籍管理功能 -添加书籍 -查找书籍 -借阅书籍 -归还书籍 -列出所有书籍数据持久化 -保存书籍 -加载书籍操作日志记录图形用户界面(GUI) -界面设计 -功能实现代码原理总结实现界面 ![](https://i-blog.csdnimg.cn/dire…

飞牛私有云访问外网

飞牛私有云 fnOS NAS 是一款有着卓越的性能以及强大的兼容性和智能化的管理界面&#xff0c;它之所以能在 NAS 市场中脱颖而出&#xff0c;是因为 fnOS 基于最新的 Linux 内核&#xff08;Debian发行版&#xff09;深度开发&#xff0c;不仅兼容主流 x86 硬件&#xff0c;还支持…