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
英文地址,請注明出處:http://en.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;使數…