Spring MVC中Restful風格引入

一,RESTful概述

????????在現代Web應用開發中,RESTful架構風格已成為一種標準實踐,特別是在構建可擴展的Web服務時。Spring MVC提供了全面的支持來構建遵循REST原則的Web服務。我在此介紹如何在Spring MVC中實現RESTful風格的Web服務,并通過示例演示其使用。

二,什么是RESTful架構?

????????Spring MVC是一個強大的模塊化框架,可以通過聲明式的方式輕松創建Web應用。使用Spring MVC實現RESTful Web服務的優勢包括:

????????支持注解:Spring的@RestController和@RequestMapping等注解使得創建RESTful服務變得簡單直觀。

????????數據綁定:自動的數據綁定支持,可以將請求自動轉換為模型對象,同時也支持多種數據格式的響應,如XML、JSON等。

????????異常處理:通過@ExceptionHandler提供了統一的異常處理機制。????????

????????依賴注入:利用Spring的依賴注入優勢,更好地管理服務層。

三,實現RESTful服務的基本步驟

1. 創建Spring MVC項目

2.定義資源表示類

????????在Spring中,資源通常以POJO(Plain Old Java Object)類表示。例如,一個用戶資源可以定義如下:
public class User {private Integer id;private String name;private String email;// getters and setters
}

?3. 創建REST控制器

@RestController
@RequestMapping("/api/users")
public class UserController {@GetMapping("/{id}/{a}/{b}")public ResponseEntity<User> getUserByIdAndParams(@PathVariable Integer id,@PathVariable String a,@PathVariable String b) {// 示例:根據id獲取用戶,并可能使用a和b進行一些額外操作User user = userService.findById(id);// 示例邏輯:假設a和b是要應用到User對象的操作或變量user.setSomeField(a);user.setAnotherField(b);return ResponseEntity.ok(user);}//處理POST請求,用于創建新用戶@PostMappingpublic ResponseEntity<User> createUser(@RequestBody User user) {User createdUser = userService.create(user);//返回狀態碼201 (Created),表示資源已被成功創建return new ResponseEntity<>(createdUser, HttpStatus.CREATED);}//處理PUT請求,用于更新指定ID的用戶@PutMapping("/{id}")public ResponseEntity<User> updateUser(@PathVariable Integer id, @RequestBody User user) {User updatedUser = userService.update(id, user);//方法中首先根據ID更新用戶信息,然后返回更新后的用戶數據return ResponseEntity.ok(updatedUser);}// 處理DELETE請求,用于刪除指定ID的用戶@DeleteMapping("/{id}")public ResponseEntity<Void> deleteUser(@PathVariable Integer id) {userService.delete(id);//返回一個無內容的響應(HTTP 204 No Content),表示請求已成功處理,但沒有內容返回return ResponseEntity.noContent().build();}
}
????在上面的方法中,我在@GetMapping("/{id}/{a}/{b}”)定義了一個帶有三個參數的路徑:
  • {id} :用戶的唯一標識符。
  • {a}和{b}:這兩個參數可以用于業務邏輯中的其他目的,比如作為查詢參數或用于修改返回的數據。
  • @PathVariable:將URL中的變量綁定到方法的參數上。此方法接收三個參數:用戶ID (id) 和兩個字符串參數 (a,b)。

4. 異常處理

處理REST API中可能發生的異常,例如資源找不到。
@ResponseStatus(HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {public ResourceNotFoundException(String message) {super(message);}
}
在控制器中使用@ExceptionHandler處理異常:
@ControllerAdvice
public class RestExceptionHandler {@ExceptionHandler(ResourceNotFoundException.class)public ResponseEntity<String> handleResourceNotFound(ResourceNotFoundException ex) {return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND);}
}

?四,@RestController注解和@Controller注解對比

@RestController:該控制器的所有方法默認都是直接返回數據給客戶端,而不是返回視圖的名稱。這種方式特別適用于構建RESTful Web服務,其中數據(如JSON或XML)直接返回給調用者。
@Controller:這通常用于更傳統的Web應用程序,其中控制器的作用是設置模型數據并返回視圖的名稱,由視圖(如JSP)來生成HTML響應。

? 下面例子用@Controller重寫上面提到的post方法

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;@Controller
@RequestMapping("/api/users")
public class UserController {@PostMappingpublic String createUser(@ModelAttribute User user) {User createdUser = userService.create(user);return "redirect:/users/list"; // 重定向到用戶列表頁面}// 其他方法保持不變...
}
????????這樣做表明我們不再期望所有方法自動將返回值作為響應體返回,而是可以返回視圖名稱。這里返回的字符串"redirect:/users/list"指示Spring MVC進行重定向到給定的路徑,有時候也可以直接返回視圖jsp的名稱,如:test.jsp可以直接return "test",參考如下五

五,springmvc中使用轉發和重定向

????????通過SpringMVC來實現轉發和重定向-有視圖解析器;
<!--視圖解折器:模板引等 Thymeleaf Freemarker...-->
<bean class="org.springframework,web.servlet.view,InternalResourceViewResolver" id="InternalResourceViewResolver"
<!--時級-->
<property name="prefix" value."/WEB-INF/jsP/"/>“--行級-->
<property name="suffix" value=".jsp"/>
</bean>
????????重定向,不需要視圖解析器,本質就是重新請求一個新地方嘛,所以注意路徑問題可以重定向到另外一個請求實現

@controller
public class ResultspringMvc{@RequestMapping("/rsm2/t1")public string test1(){//轉發return"test";//返回test.jsp視圖}@RequestMapping("/rsm2/t2")public string test2(){//重定向return "redirect:/index.jsp";//return"redirect:hello.do";//hello.do為另一個請求/}
}

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

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

相關文章

【八大排序】java版(上)(冒泡、快排、堆排、選擇排序)

文章目錄 一、冒泡排序(重點)思路代碼 二、快排(面試重點)思路代碼 三、堆排序(面試重點)思路代碼 四、選擇排序思路代碼 一、冒泡排序(重點) 思路 前后兩兩數據進行比較&#xff0c;小的數據往前走&#xff0c;大的數據往后走&#xff0c;每一輪結束之后&#xff0c;最大的數…

網頁數據抓取:融合BeautifulSoup和Scrapy的高級爬蟲技術

網頁數據抓取&#xff1a;融合BeautifulSoup和Scrapy的高級爬蟲技術 在當今的大數據時代&#xff0c;網絡爬蟲技術已經成為獲取信息的重要手段之一。Python憑借其強大的庫支持&#xff0c;成為了進行網頁數據抓取的首選語言。在眾多的爬蟲庫中&#xff0c;BeautifulSoup和Scrap…

在Android Jetpack Compose中實現夜間模式

在Android Jetpack Compose中實現夜間模式 隨著用戶對夜間模式需求的增加,Android開發者需要掌握如何在應用中實現這一功能。Jetpack Compose作為現代Android UI工具包,提供了簡便且靈活的方式來實現夜間模式。本文將詳細介紹如何在Jetpack Compose中實現夜間模式,包括配置…

Linux系統之玩轉fortune命令

Linux系統之好玩的fortune命令 一、fortune命令介紹1.1 fortune簡介1.2 fortune中英文 二、本地環境介紹2.1 本地環境規劃2.2 本次實踐介紹 三、檢查本地環境3.1 檢查本地操作系統版本3.2 檢查系統內核版本 四、fortune英文版的使用4.1 安裝fortune英文版4.2 命令幫助4.3 fortu…

69、Flink 的 DataStream Connector 之 Kafka 連接器詳解

1.概述 Flink 提供了 Kafka 連接器使用精確一次&#xff08;Exactly-once&#xff09;的語義在 Kafka topic 中讀取和寫入數據。 目前還沒有 Flink 1.19 可用的連接器。 2.Kafka Source a&#xff09;使用方法 Kafka Source 提供了構建類來創建 KafkaSource 的實例。以下代…

安卓手機刷入Magisk面具教程

手機如果想獲取 Root 權限&#xff0c;刷入面具是必要的做法。本期文章將會教你如何刷入 Magisk 面具。 準備工作 Magisk: 關注微信公眾號 heStudio Community回復 magisk 獲取下載鏈接。第三方 Recovery&#xff08;官方 Recovery 能玩出什么花樣&#xff1f;&#xff1f;&a…

PDM系統:企業產品數據管理、PDM系統哪個好

PDM系統&#xff1a;企業產品數據管理、PDM系統哪個好 在當今這個數據驅動的時代&#xff0c;企業產品數據管理&#xff08;PDM&#xff09;系統已成為企業提升競爭力、加速產品創新、優化生產流程的關鍵工具。PDM系統不僅是一個技術平臺&#xff0c;更是企業實現數字化轉型的重…

防火墻負載分擔,帶寬策略

一、實驗拓撲圖 二、實驗要求 12&#xff0c;對現有網絡進行改造升級&#xff0c;將當個防火墻組網改成雙機熱備的組網形式&#xff0c;做負載分擔模式&#xff0c;游客區和DMZ區走FW3&#xff0c;生產區和辦公區的流量走FW1 13&#xff0c;辦公區上網用戶限制流量不超過100M&a…

昇思25天學習打卡營第23天|基于MobileNetv2的垃圾分類

基于MobileNetv2的垃圾分類 1、實驗目的 了解熟悉垃圾分類應用代碼的編寫&#xff08;Python語言&#xff09;&#xff1b;了解Linux操作系統的基本使用&#xff1b;掌握atc命令進行模型轉換的基本操作。 2、MobileNetv2模型原理介紹 MobileNet網絡是由Google團隊于2017年提…

在 Debian 12 上安裝 budgie-extras-common 包

在 Debian 12 上安裝 budgie-extras-common 包&#xff1a; 安裝前的準備 更新 apt 數據庫&#xff1a; 使用 apt-get:sudo apt-get update或者使用 apt:sudo apt update如果使用 aptitude&#xff08;通常不在 Debian 默認安裝中&#xff09;&#xff0c;首先需要安裝它&…

效能工具:執行 npm start 可直接切換proxy代理UR后直接啟動項目

1) 背景: 我們項目是2個前端3個后端的配置。前端和每個后端都有需要調試的接口。 因此經常切換vite.congig.js中的proxy后端代理鏈接&#xff0c;是挺麻煩的。 于是我研究如何能快速切換后端URL&#xff0c;所幸懶人有懶福&#xff0c;我找到了Inquirer 和 fs&#xff0c; 實…

根據日志繪制障礙物輪廓點和中心點

繪制log中的障礙物凸包點&#xff0c;首先給出log日志中的障礙物的凸包點 [Info]-[PointCloudHandle:88]:[2024-07-14,09:55:41.052]-back obj size 6 [Info]-[PointCloudHandle:92]:[2024-07-14,09:55:41.052]-back obj size 6 cur idx 1 [Info]-[PointCloudHandle:93]:[2024…

極客筆記【收藏】

1. 鴻蒙調試命令&#xff08;adb&#xff09;&#xff1a; OH HDC命令使用指南|極客筆記 2. 添加selinux 權限 Android 根據AVC報錯添加Selinux 權限|極客筆記

【面試題】Golang 鎖的相關問題(第七篇)

目錄 1.Mutex 幾種狀態 1. 鎖定狀態&#xff08;Locked&#xff09; 2. 未鎖定狀態&#xff08;Unlocked&#xff09; 3. 喚醒狀態&#xff08;Woken&#xff09; 4. 饑餓狀態&#xff08;Starving&#xff09; 5. 等待者計數&#xff08;Waiters Count&#xff09; 總結…

STM32+TMC2209控制步進電機正反轉。

STM32F103ZET6TMC2209控制步進電機正反轉 1. 步進電機介紹2 驅動器TMC2209介紹2.1 引腳圖及其功能2.2 細分介紹2.3 TMC控制驅動器接法 3 控制器介紹3.1 確定控制引腳3.2 UBEMX配置3.2.1 GPIO配置3.2.2 NVIC配置3.2.3 RCC配置3.2.4 SYS配置3.2.5 USRAT2配置&#xff08;PS:沒用上…

單相電機或風扇接電容的具體接線方法示例

單相電機或風扇接電容的具體接線方法示例 如下圖所示&#xff0c;單相電機引出3根繞組線&#xff08;不同品牌或型號的電機&#xff0c;引出線的顏色可能會有差異&#xff09;&#xff0c; 那么如何進行接線呢&#xff1f; 首先&#xff0c;跳過萬用表測量主、副繞組的阻值…

Unable to obtain driver using Selenium Manager: Selenium Manager failed解決方案

大家好,我是愛編程的喵喵。雙985碩士畢業,現擔任全棧工程師一職,熱衷于將數據思維應用到工作與生活中。從事機器學習以及相關的前后端開發工作。曾在阿里云、科大訊飛、CCF等比賽獲得多次Top名次。現為CSDN博客專家、人工智能領域優質創作者。喜歡通過博客創作的方式對所學的…

聊聊自動駕駛中的路徑和軌跡

在移動機器人領域&#xff0c;路徑&#xff08;Path&#xff09;和軌跡&#xff08;Trajectory&#xff09;是兩個緊密相關但又有所區別的概念。 路徑 是機器人從起點到終點的一系列點的序列&#xff0c;它只考慮了位置信息&#xff0c;而不考慮時間信息。路徑描述了機器人將要…

Java中常見的語法糖

文章目錄 概覽泛型增強for循環自動裝箱與拆箱字符串拼接枚舉類型可變參數內部類try-with-resourcesLambda表達式 概覽 語法糖是指編程語言中的一種語法結構&#xff0c;它們并不提供新的功能&#xff0c;而是為了讓代碼更易讀、更易寫而設計的。語法糖使得某些常見的編程模式或…