SpringMVC系列(五)(响应实验以及Restful架构风格(上))

0 引言

作者正在学习SpringMVC相关内容,学到了一些知识,希望分享给需要短时间想要了解SpringMVC的读者朋友们,想用通俗的语言讲述其中的知识,希望与诸位共勉,共同进步!

本系列会持续更新!!可以放心食用!

ps:RestFul架构风格会分为上中下三篇来描述,名字分别为系列五-系列七,这三篇会同一时间发布!!!

1 响应处理实验

在本系列四和五中,我们通过十个请求处理实验,基本上把前端传递过来的请求的处理给过了一遍,接下来的响应实验则是从我们的后端需要怎么返回数据给前端的问题。

1.1 响应实验:返回一个JSON格式数据

假设我需要给前端返回一个People对象,并以JSON格式的数据传输,我们可以进行以下测试:

首先在网页打开local:8080,并点击:

点击F12我们发现点击这个前端给我的发送的请求是/resp01,并且经过测试请求类型为Get:

所以后端的测试代码可以写成:

    @RequestMapping("/resp01")public People resp01(){People people = new People();people.setUsername("张三");people.setPassword("123456");people.setCellphone("123456789");people.setAgreement(true);people.setSex("男");people.setGrade("2021级");people.setHobby(new String[]{"看电影","看小说"});return people;}

注意,我们在后端只需要返回对象,SpringMVC会自动把返回的对象转化为JSON格式!

网页中测试结果:

成功返回!

1.2 响应实验:返回一个下载文件

这种情况其实我们经常碰见,当我们去官网上下载什么东西的时候,是不是需要点击一个下载按钮,然后在我们的下载出就会弹出当前在下载的.exe文件,例如我们在下载百度网盘的客户端的时候:

我们这次实验要做的就是当前端发送请求过来时,我们返回给前端一个照片文件,后端的代码可以这样写:

    @RequestMapping("/download")public ResponseEntity<byte[]> download() throws Exception {FileInputStream fileInputStream = new FileInputStream("D:\\1.png");byte[] bytes = fileInputStream.readAllBytes();return ResponseEntity.ok().contentType(MediaType.APPLICATION_OCTET_STREAM).contentLength(bytes.length)//内容处理方式.header("Content-Disposition", "attachment;filename=1.png").body(bytes);}

最核心的代码是:

return ResponseEntity.ok().contentType(MediaType.APPLICATION_OCTET_STREAM).contentLength(bytes.length)//内容处理方式.header("Content-Disposition", "attachment;filename=1.png").body(bytes);

这一块内容,经过前面系列我们知道了HttpEntity,里面封装了包括请求头以及请求体中的所有数据,ResponseEntity则是封装了响应头和响应体中所有的数据。

1)contentType是指定响应体中内容的类型;

2)contentLength指的是内容的长度;

3)header里的设置是相对固定的,只有我们在响应头中插入这些内容,前端才会响应成下载文件

4)body传入实际内容。

写完之后我们进行测试:

点击测试,网页结果返回:

返回成功!!

PS:响应处理相关代码已更新放置网址:

lin/请求测试十个实验

不想敲代码的朋友们可直接查看

2 Restful软件架构风格

2.1简介

用简单的话来说RESTful 代码架构是一种设计风格,就像盖房子有统一规划一样。客户端就像来你家玩的朋友,服务器就像是你的家,双方通过网络这条 “路” 来沟通。采用 HTTP 协议约定的规则,用网址(URL)确定要操作的东西(资源),通过不同的方法(GET、POST、PUT、DELETE 等,类似于不同的动作指令),客户端像朋友一样跟服务器交流,来获取、创建、修改、删除服务器上的信息,整个过程服务器不记性(无状态),每次对话完就忘记之前的事儿,这样大家交流简单、高效、标准统一。

2.2 简要说明

我们可以看出Restful风格下的网址请求,如果请求对单个员工数据表进行操作的话前面路径都是/employee,也可以说当你对某一个数据库进行操作,你的前置路径就可以统一规划成/XX,之间业务的不同可以通过请求方式以及后置路径的不同来体现!!!这就是Restful风格代码!在多层级的业务代码中,主要在controller包中进行体现!!!

2.3 举例说明--使用员工增删改查的例子

2.3.1 初始准备

(1)首先我们先创建一个新工程,注意需要勾选下面这几个依赖:

(2)然后创建一个新的MySQL数据表,使用以下语句创建数据表:

CREATE SCHEMA `crud` ;/*Navicat Premium Dump SQLSource Server         : localhost_3306Source Server Type    : MySQLSource Server Version : 80027 (8.0.27)Source Host           : localhost:3306Source Schema         : restful_crudTarget Server Type    : MySQLTarget Server Version : 80027 (8.0.27)File Encoding         : 65001Date: 20/08/2024 18:46:17
*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;USE crud;  -- 添加此语句选择数据库-- ----------------------------
-- Table structure for employee
-- ----------------------------
DROP TABLE IF EXISTS `employee`;
CREATE TABLE `employee`  (`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '员工名字',`age` int NULL DEFAULT NULL COMMENT '年龄',`email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '邮箱',`gender` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '性别',`address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '住址',`salary` decimal(10, 2) NULL DEFAULT NULL COMMENT '薪资',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of employee
-- ----------------------------
INSERT INTO `employee` VALUES (1, '张三', 11, 'aa@qq.com', '男', '西安', 9999.00);
INSERT INTO `employee` VALUES (4, 'leifengyang', 10, 'aaa', '男', 'sss', 100.00);SET FOREIGN_KEY_CHECKS = 1;

我们可以创建完成后可以进MySQL Workbench里看看在员工表中已经存储了这两条数据(没有下载MySQL以及MySQL Workbench可以去找一找教程进行安装):

(3)然后回到我们代码端,在配置文件application.properties中先配置如下:

用户名和密码使用自己的就可以啦!!接下来就是正式的代码环节。

2.3.1 业务代码结构

主要包括:

主要结构存在bean/dao/service/controller这四个包

1)bean

专门用于存放对象类的地方,比如我们需要增删改查的员工就需要使用的员工类,代码如下:

import lombok.Data;import java.math.BigDecimal;@Data
public class Employee {private Long id;private String name;private Integer age;private String email;private String gender;private String address;private BigDecimal salary;
}

注意这与数据库中的员工表里的属性一一对应!!!!

2)dao

这个包下,主要对接数据库,主要编写对数据库增删改查的操作,需要分成接口以及实现两个部分

3)service

这个包主要是会对dao包传递过来已经处理后的的数据进行真正的业务代码编写,也是需要分成接口以及实现两个部分

4)controller

这个包下,主要对接前端的请求,对前端输入的请求数据进行处理。且需要分成接口以及实现两个部分。这一部分主要体现Restful风格!!具体在后续文章中给出详细解释!

对于dao、service以及controller下的包需要干什么可能还有点抽象,在本系列(六)中会进行详细的代码编写

参考:

P102-107

107.RESTful - API 接口设计的架构风格_哔哩哔哩_bilibili

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows 环境下设置 RabbitMQ 的 consumer_timeout 参数

在 Windows 环境下设置 RabbitMQ 的 consumer_timeout 参数&#xff0c;可以通过临时修改或永久修改两种方式实现。以下是具体操作步骤&#xff1a; 一、临时修改&#xff08;无需重启服务&#xff0c;但重启后失效&#xff09; ‌通过命令行动态设置‌ 打开命令提示符&#xf…

Python 中切换镜像源

在 Python 中切换镜像源主要涉及 pip 包管理器 和 conda 环境&#xff08;如 Anaconda、Miniconda&#xff09; 的配置。国内访问 Python 官方源&#xff08;PyPI&#xff09;可能较慢&#xff0c;因此推荐使用国内镜像源&#xff08;如阿里云、清华大学、豆瓣等&#xff09;。…

深入解析拓扑排序算法:从原理到C++实现

一、拓扑排序概述 拓扑排序(Topological Sorting)是对有向无环图(Directed Acyclic Graph&#xff0c;简称DAG)的顶点进行排序&#xff0c;得到一个线性序列&#xff0c;使得对于图中的任意一对顶点u和v&#xff0c;若存在一条从u到v的路径&#xff0c;则u在排序结果中出现在v…

图像质量对比感悟

具体任务&#xff1a; 在本次任务中&#xff0c;我需要对比两张1080p的yuv图片的清晰度&#xff0c;那么如何判断呢&#xff1f;主要是进行了主观判断和客观psnr的判断。 psnr解释&#xff1a; 定义&#xff1a; PSNR 用于衡量 两幅图像之间的差异&#xff08;通常是原始图像和…

机器学习(ML)-Scikit-Learn--快速入门

专栏:机器学习 个人主页:云端筑梦狮 一.数据集读取方法&#xff08;常用功能用熟即可不用背下来&#xff09; 以例子代表需要的知识点和方法。 1. 导入必要的库 from sklearn.datasets import load_iris import numpy as npload_iris()&#xff1a;用于加载鸢尾花数据集的…

SQL语句四大分类详解:DDL、DML、DQL、DCL

前言 SQL&#xff08;Structured Query Language&#xff09;是用于管理和操作关系型数据库的标准语言。无论是开发人员还是数据库管理员&#xff0c;掌握 SQL 是必不可少的技能。 SQL 根据功能的不同&#xff0c;通常被划分为 四大类&#xff1a; ✅ DDL&#xff08;数据定义…

如何将Word里每页的行数设置成50行

https://www.zhihu.com/question/357856175 本文来自知乎林听晴 第一步&#xff1a;新建一个Word文档 打开“页面布局”&#xff0c;之后点击图片圈起来的小图标&#xff0c;即可出现“页面设置”页面。 ​ ​ 路径&#xff1a;页面设置—文档网络&#xff0c;可以看到默认行…

纯前端本地文件管理器(VSCode风格)(浏览器对本地文件增删改查)

纯前端本地文件管理器&#xff08;VSCode风格&#xff09;(浏览器对本地文件增删改查) 简介 本项目为一个纯前端实现的本地文件管理器网页&#xff08;index.html&#xff09;&#xff0c;可在 Chrome/Edge 浏览器中直接打开&#xff0c;具备类似 VSCode 的本地文件夹操作体验…

windows安装wsl、Ubuntu、docker desktop

以下是Windows安装WSL&#xff08;Windows Subsystem for Linux&#xff09;及在Ubuntu中配置使用Docker的完整流程&#xff0c;整合了最新官方方案和常见问题解决方案&#xff1a; &#x1f527; 一、Windows安装WSL&#xff08;推荐WSL 2&#xff09; &#x1f4cd; 安装前提…

华为云Flexus+DeepSeek征文|云端智能加持:华为云ModelArts Studio提升Chat2DB的AI数据库管理效能

华为云FlexusDeepSeek征文&#xff5c;云端智能加持&#xff1a;华为云ModelArts Studio提升Chat2DB的AI数据库管理效能 前言一、华为云ModelArts Studio平台介绍1.1 ModelArts Studio介绍1.2 ModelArts Studio主要特点1.3 ModelArts Studio使用场景1.4 ModelArts Studio产品架…

微信小程序封装loading 修改

1. custom-loading.vue <template><view v-if"visible" class"custom-loading-mask" touchmove.stop.prevent><view class"custom-loading-container"><!-- 动态点点 --><text class"loading-text">{…

Windows环境下Docker容器化的安装与设置指南

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; 系统要求与准备工作 在开始安装和配置 Docker 之前&#xff0c;需要确保您的 Windows 系统满足以下要求&#xff1a; 操作系统版本&#xff1a;推荐使用 Windows 10 或更高版本&#xff0c;特别是 64 位版本。对…

0 数学习题本

零 引言 数学错题与好题总结 一 基础阶段 1 高数部分 习题册:武忠祥 660 1️⃣ 函数 极限 连续 2️⃣ 一元微分 3️⃣ 一元积分 4️⃣ 微分方程 5️⃣ 多元微分 6️⃣ 二重积分 7️⃣ 无穷级数 8️⃣ 空间几何 9️⃣ 多元积分 2 线代部分 习题册:汤家凤 1800 1️⃣ 行列式…

USB服务器的5个核心价值

USB服务器&#xff08;USB Server&#xff09;是一款专为企业级环境设计的创新型硬件解决方案&#xff0c;其核心使命在于解决物理USB设备&#xff08;如U盾、加密狗、身份认证Key等&#xff09;在分布式办公、远程协作及复杂IT架构中面临的接入、管理与安全难题。本文以朝天椒…

基于vue3+ByteMD快速搭建自己的Markdown文档编辑器

简介 ByteMD 是一个轻量级、功能丰富的 Markdown 编辑器组件&#xff0c;由稀土掘金&#xff08;juejin.cn&#xff09;团队开发并开源。它采用 Svelte 构建&#xff0c;支持双向编辑&#xff08;所见即所得&#xff09;&#xff0c;并提供了丰富的插件系统。 核心特点 轻量…

“AI大语言模型”助力大气科学:ERA5再分析数据、WRF处理、遥感降水、CMIP6未来气候、天气晴雨预测的完整方法论等

内容覆盖使用GPT处理数据、生成论文摘要、文献综述、技术方法分析等实战案例&#xff0c;将AI技术广泛应用于科研工作。特别关注将GPT与Python结合应用于遥感降水数据处理、ERA5大气再分析数据的统计分析、干旱监测及风能和太阳能资源评估等大气科学关键场景。旨在提升参与者在…

STM32给FPGA的外挂FLASH进行升级

STM32给FPGA的外挂FLASH进行升级 一、电路方案设计二、软件写FLASH三、解决第一次烧录后FPGA无法启动的问题 前言&#xff1a; 一个复杂的嵌入式中&#xff0c;如果对某些实时性要求极高的情况下势必会使用到FPGA来保证&#xff0c;这里面牵扯到给FPGA的程序升级问题&#xff0…

Python 数据分析与可视化 Day 9 - 缺失值与异常值处理技巧

✅ 今日目标 熟练处理数据中的缺失值&#xff08;NaN、None&#xff09;学会识别和处理异常值&#xff08;outliers&#xff09;掌握常用的处理方法&#xff1a;填充、删除、替换、标准差法、箱型图法等为后续机器学习建模打好数据清洗基础 &#x1f4da; 一、缺失值处理&…

概述-1-数据库的相关概念

数据库的相关概念 用户通过SQL操作数据库管理系统&#xff0c;再通过数据库管理系统操作数据库以及数据库中的数据。 数据库 数据库是存储数据的仓库, 数据是有组织的进行存储, DataBase简称&#xff08;DB&#xff09; 数据库管理系统 操纵和管理数据库的大型软件, DataB…

可视化大屏展示

可视化大屏是一种将大量数据进行整合、分析&#xff0c;并以直观、形象的可视化方式展示在大屏幕上的信息展示系统。主要组成部分分为2个&#xff1a;硬件设备、软件系统。 一、大屏价值 1、数据可视化&#xff1a;将复杂的数据转化为直观的图形、图表和地图等&#xff0c;使数…