Spring_MVC 中的 JSON 數據處理與 REST 風格開發

Spring_MVC 中的 JSON 數據處理與 REST 風格開發

一、JSON 格式參數

1. 格式布置

依賴導入

為了處理 JSON 數據,需要在項目中引入 Jackson 庫,它是 Spring_MVC 默認使用的 JSON 處理工具。

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.15.4</version>
</dependency>

配置類

在 Spring 配置類中啟用 @EnableWebMvc 注解,以激活 Spring_MVC 的高級功能,包括 JSON 數據的自動處理。

@Configuration
@ComponentScan("com.itheima.controller")
@EnableWebMvc
public class WebConfig {
}
  • @EnableWebMvc:啟用 Spring_MVC 的高級功能,包括數據綁定、內容協商等。
  • @ComponentScan:指定 Spring 容器掃描的包路徑,確保控制器類被正確加載。

2. JSON 數組格式

示例:接收 JSON 數組

使用 @RequestBody 注解可以接收客戶端發送的 JSON 數組,并將其自動轉換為 Java 對象。

@Controller
@RequestMapping("/json")
public class JsonController {@PostMapping("/so")@ResponseBodypublic String handleJsonArray(@RequestBody List<String> teachers) {System.out.println("Received teachers: " + teachers);return "{\"model\": \"springmvc\"}";}
}
  • @RequestBody:將請求體中的 JSON 數據綁定到方法參數。
  • List:接收一個字符串數組。

Postman 測試

在 Postman 中,可以將請求類型設置為 POST,并在請求體中輸入 JSON 數組:

["Alice","Bob","Charlie"
]

3. JSON 引用類型

示例:接收 JSON 對象

Spring_MVC 可以自動將 JSON 對象轉換為對應的 Java 類。

@PostMapping("/st")
@ResponseBody
public String handleJsonObject(@RequestBody Teacher teacher) {System.out.println("Received teacher: " + teacher.getName());return "{\"model\": \"springmvc\"}";
}
  • Teacher 類

    public class Teacher {private String name;private int age;// Getters and Setterspublic String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
    }
    

Postman 測試

在 Postman 中,發送以下 JSON 數據:

{"name": "Alice","age": 30
}

4. JSON 引用數組類型

示例:接收 JSON 對象數組
在這里插入圖片描述

Spring_MVC 也可以處理 JSON 對象數組,并將其轉換為 Java 對象列表。

@PostMapping("/sf")
@ResponseBody
public String handleJsonArrayObject(@RequestBody List<Teacher> teachers) {System.out.println("Received teachers: " + teachers);return "{\"model\": \"springmvc\"}";
}

Postman 測試

在 Postman 中,發送以下 JSON 數據:

[{"name": "itcsa","id": 123},{"name": "itcsass","id": 125}
]

5. 細節講述

@RequestBody 與 @RequestParam 的區別

  • @RequestBody:用于接收請求體中的 JSON 數據,并將其反序列化為 Java 對象。
  • @RequestParam:用于接收 URL 參數或表單數據。

示例

@PostMapping("/example")
@ResponseBody
public String example(@RequestBody User user, @RequestParam String token) {System.out.println("User: " + user.getName());System.out.println("Token: " + token);return "{\"status\": \"success\"}";
}
  • @RequestBody User user:接收 JSON 數據并轉換為 User 對象。
  • @RequestParam String token:接收 URL 參數 token

二、響應類型處理

1. 返回 JSP 頁面

在 Spring_MVC 中,可以直接返回 JSP 頁面的名稱,而無需使用 @ResponseBody

@GetMapping("/save")
public String save() {return "index.jsp";
}
  • 返回的字符串是 JSP 頁面的路徑,Spring_MVC 會自動解析并渲染該頁面。

2. 返回純文本

使用 @ResponseBody 注解可以返回純文本響應。

@GetMapping("/text")
@ResponseBody
public String text() {return "This is a plain text response.";
}
  • @ResponseBody:將方法的返回值直接作為響應體返回。

3. 返回 JSON 數據

@RequestMapping("/sv")
@ResponseBody
public student sv(){System.out.println("返回json數據類型");student student = new student();student.setId(123);student.setName("智能");return student;
}

在這里插入圖片描述

是通過respnsebody進行設置的,設置返回類型轉換為下面設置的student的類型

數組類型的json:

@RequestMapping("/sm")
@ResponseBody
public List<student> sm(){System.out.println("返回json數據引用類型");student student = new student();student.setId(123);student.setName("智能");student student1 = new student();student1.setName("王五");student1.setId(456);List<student> students = new ArrayList<>();students.add(student1);students.add(student);return students;
}

4、@ResponseBody

類型:方法注解

作用:設置當前控制器作為返回值

三、REST 風格開發

1. REST 原理

REST(Representational State Transfer,表現層狀態轉換)是一種軟件架構風格,用于設計網絡應用程序。它強調使用 HTTP 方法(GET、POST、PUT、DELETE 等)來操作資源。

在這里插入圖片描述

2. REST 風格的使用規范

示例:CRUD 操作

@RestController
@RequestMapping("/api/users")
public class UserController {@GetMappingpublic List<User> getAllUsers() {return userService.getAllUsers();}@GetMapping("/{id}")public User getUserById(@PathVariable int id) {return userService.getUserById(id);}@PostMappingpublic User createUser(@RequestBody User user) {return userService.createUser(user);}@PutMapping("/{id}")public User updateUser(@PathVariable int id, @RequestBody User user) {return userService.updateUser(id, user);}@DeleteMapping("/{id}")public void deleteUser(@PathVariable int id) {userService.deleteUser(id);}
}
  • @RestController:標記控制器為 REST 風格。
  • @GetMapping@PostMapping@PutMapping@DeleteMapping:分別用于處理 GET、POST、PUT、DELETE 請求。

3. REST 風格的注解使用場景

在這里插入圖片描述

4. REST 風格的簡用用法

示例:使用 @RestController@RequestMapping

@RestController
@RequestMapping("/books")
public class BookController {@GetMappingpublic List<Book> getAllBooks() {return bookService.getAllBooks();}@GetMapping("/{id}")public Book getBookById(@PathVariable int id) {return bookService.getBookById(id);}@PostMappingpublic Book createBook(@RequestBody Book book) {return bookService.createBook(book);}@PutMapping("/{id}")public Book updateBook(@PathVariable int id, @RequestBody Book book) {return bookService.updateBook(id, book);}@DeleteMapping("/{id}")public void deleteBook(@PathVariable int id) {bookService.deleteBook(id);}
}
  • @RestController:標記控制器為 REST 風格。

  • @RequestMapping(“/books”):設置控制器的基礎路徑。
    k updateBook(@PathVariable int id, @RequestBody Book book) {
    return bookService.updateBook(id, book);
    }

    @DeleteMapping(“/{id}”)
    public void deleteBook(@PathVariable int id) {
    bookService.deleteBook(id);
    }
    }

- @RestController:標記控制器為 REST 風格。
- @RequestMapping("/books"):設置控制器的基礎路徑。
- @GetMapping、@PostMapping、@PutMapping、@DeleteMapping:簡化了 HTTP 方法的注解。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/78471.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78471.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/78471.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

藍橋杯 8. 移動距離

移動距離 原題目鏈接 題目描述 X 星球居民小區的樓房全是一樣的&#xff0c;并且按矩陣樣式排列。樓房的編號為 1, 2, 3, ??。 當排滿一行時&#xff0c;從下一行相鄰的樓往反方向排號。 例如&#xff0c;當小區排號寬度為 6 時&#xff0c;排列如下&#xff1a; 1 2 …

第11章 安全網絡架構和組件(一)

11.1 OSI 模型 協議可通過網絡在計算機之間進行通信。 協議是一組規則和限制&#xff0c;用于定義數據如何通過網絡介質&#xff08;如雙絞線、無線傳輸等&#xff09;進行傳輸。 國際標準化組織(ISO)在20世紀70年代晚期開發了開放系統互連(OSI)參考模型。 11.1.1 OSI模型的…

文獻分享:一種四價雙特異性抗體的功能性和IgG樣穩定性、藥理學和可開發特性研究

背景 雙特異性抗體&#xff08;bsAb&#xff09;是一種有前途的藥物形式&#xff0c;能夠同時結合相同或不同抗原上的兩個不同表位。迄今為止&#xff0c;已有14個雙特異性抗體藥物獲得上市批準&#xff0c;盡管取得了這些成功并且迄今為止設計了多種形式&#xff0c;但具有高…

英文中數字讀法規則

以下是英文中數字讀法的詳細規則&#xff0c;涵蓋基本數字、大數字、小數、分數、序數詞及特殊場景&#xff08;如電話號碼、年份、金額等&#xff09;&#xff1a; 一、基本數字&#xff08;0-10&#xff09; 數字基數詞&#xff08;Cardinal&#xff09;序數詞&#xff08;O…

32BIT的SPI主機控制

SPI傳輸位數可參數化配置。 SPI_MASTER: timescale 1ns / 1ps module SPI_Master #(parameter CLK_FREQ 50,parameter SPI_CLK 1000,parameter CPOL 0,parameter CPHA 0 )(input clk,input rst_n,input WrRdReq, //讀/寫數據請求output …

vue響應式原理——vue2和vue3的響應式實現區別

Vue的核心功能點之一是響應式&#xff1a;Vue 會自動跟蹤 JavaScript 狀態并在其發生變化時響應式地更新 DOM。 簡單的來說就是&#xff0c;頁面的渲染效果會隨著數據變化而變化&#xff0c;不用我們去手動操作DOM樹進行數據變化后的渲染。為了實現這一目的&#xff0c;我們最簡…

Kaamel白皮書:2025版COPPA落地實操指南

COPPA簡介 《兒童在線隱私保護法案》&#xff08;COPPA&#xff09;于1998年在美國頒布&#xff0c;其最初的動因源于人們日益增長的對互聯網上收集兒童個人信息的擔憂。為了響應這一問題&#xff0c;聯邦貿易委員會&#xff08;FTC&#xff09;被授權制定并執行相關法規。COP…

測試基礎筆記第十四天

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 一、字符串1.字符串2.字符串切片3.查找find&#xff08;&#xff09;4.去除兩端空白字符 strip5.字符串轉換大小寫 lower、upper5.拆分 split()6.字符串的其他常見方…

什么是Lua模塊?你會如何使用NGINX的Lua模塊來定制請求處理流程?

大家好&#xff0c;我是鋒哥。今天分享關于【什么是Lua模塊&#xff1f;你會如何使用NGINX的Lua模塊來定制請求處理流程&#xff1f;】面試題。希望對大家有幫助&#xff1b; 什么是Lua模塊&#xff1f;你會如何使用NGINX的Lua模塊來定制請求處理流程&#xff1f; 1000道 互聯…

ubuntu擴展邏輯卷并調整文件系統大小步驟

安裝好ubuntu如果沒有調整磁盤空間,一般默認給你100G的空間,在用完時再調整也還來得及,下面是 ubuntu擴展邏輯卷并調整文件系統大小步驟&#xff1a; 1. 擴展邏輯卷 運行以下命令來擴展邏輯卷 /dev/ubuntu-vg/ubuntu-lv&#xff0c;使其使用卷組中所有未分配的空間&#xff…

復雜背景下無人機影像小目標檢測:MPE-YOLO抗遮擋與抗背景干擾設計

目錄 一、引言 二、挑戰和貢獻 密集小目標和遮擋 實時性要求與精度權衡 復雜背景 三、MPE-YOLO模型細節 多級特征集成器&#xff08;MFI&#xff09; 感知增強卷積&#xff08;PEC&#xff09; 增強范圍C2f模塊&#xff08;ES-C2f&#xff09; 四、Coovally AI模型訓…

【C++】13.list的模擬實現

首先&#xff0c;我們需要把鏈表管理起來&#xff0c;也就是把一個個節點管理起來&#xff0c;但是每個節點的信息我們也需要管理&#xff0c;例如節點的前驅指針和后驅指針&#xff0c;以及節點的值&#xff0c;所以我們這里先封裝兩個類來管理節點和鏈表。 namespace Ro {te…

TinyVue v3.22.0 正式發布:深色模式上線!集成 UnoCSS 圖標庫!TypeScript 類型支持全面升級!

我們非常高興地宣布&#xff0c;2025年4月7日&#xff0c;TinyVue發布了v3.22.0&#x1f389;。 本次 3.22.0 版本主要有以下重大變更&#xff1a; 支持深色模式增加基于 UnoCSS 的圖標庫更豐富的 TypeScript 類型聲明支持 XSS 配置 詳細的 Release Notes 請參考&#xff1a…

超級創新思路:基于CBAM-Transformer的強化學習時間序列預測模型(Python\matlab實現)

首先聲明,該模型為原創!原創!原創!且該思路還未有成果發表,感興趣的小伙伴可以借鑒!需要完整代碼可私信或評論! 本方案可用于醫療、金融、交通、零售、光伏功率預測、估計預測、天氣預測、流量預測、故障檢測等領域! 目錄 首先聲明,該模型為原創!原創!原創!且該思…

Apache Sqoop數據采集問題

Sqoop數據采集格式問題 一、Sqoop工作原理二、Sqoop命令格式三、Oracle數據采集格式問題四、Sqoop增量采集方案 Apache Sqoop是一款開源的工具&#xff0c;主要用于在Hadoop(Hive)與傳統的數據庫(mysql、postgresql…)間進行數據的傳遞&#xff0c;可以將一個關系型數據庫&…

Grok發布了Grok Studio 和 Workspaces兩個強大的功能。該如何使用?如何使用Grok3 API?

最近Grok又更新了幾個功能&#xff1a;Grok Studio 和 Workspaces。 其中 Grok Studio 主要功能包括&#xff1a; 代碼執行&#xff1a;在預覽標簽中運行 HTML 片段、Python、JavaScript 等。 Google Drive 集成&#xff1a;附加并處理 Docs、Sheets、Slides等文件。 協作工…

Vue選項式 API 與組合式 API

選項式 API 與組合式 API 選項式 API 選項式 API 是 Vue 2 中常用的開發方式&#xff0c;在 Vue 3 里依舊得到支持。它把組件邏輯劃分為不同的選項&#xff0c;像 data、methods、computed 等。 <template><div><p>Count: {{ count }}</p><button…

SiamMask中的分類分支、回歸分支與Mask分支,有何本質差異?

SiamMask中的分類分支、回歸分支與Mask分支&#xff0c;有何本質差異&#xff1f; 一、引言二、分支定位與任務目標三、網絡結構與感受野設計3.1 分類分支&#xff08;Classification Head&#xff09;3.2 回歸分支&#xff08;Regression Head&#xff09;3.3 Mask分支&#x…

threejs學習day02

場景、相機、渲染器 一、創建3D場景 // 引入threejs import * as THREE from three// 創建一個三維場景scene const scene new THREE.Scene();// 給三維場景添加物品 const geometry new THREE.BoxGeometry(100,100,100) // 形狀 const meterial new THREE.MeshBasicMat…

K8S Pod 常見數據存儲方案

假設有如下三個節點的 K8S 集群&#xff1a; k8s31master 是控制節點 k8s31node1、k8s31node2 是工作節點 容器運行時是 containerd 一、理論介紹 1.1、Volumes 卷 Kubernetes 的卷是 pod 的?個組成部分&#xff0c;因此像容器?樣在 pod 的規范&#xff08;pod.spec&#x…