Spring中@RestController注解的使用實(shí)現(xiàn)
@RestController
是 Spring MVC 中常用的注解,通常用于構(gòu)建 RESTful Web 服務(wù)。它是 @Controller
和 @ResponseBody
的組合,簡(jiǎn)化了開發(fā) RESTful 接口的流程。
本文將詳細(xì)介紹 @RestController
的使用場(chǎng)景、原理以及具體案例。
1.@RestController的作用
@RestController
的主要作用是將類標(biāo)記為一個(gè) RESTful 控制器。
- 類中的每個(gè)方法返回的數(shù)據(jù)會(huì)直接寫入 HTTP 響應(yīng)體(Response Body)。
- 默認(rèn)不需要額外使用
@ResponseBody
注解。
簡(jiǎn)而言之:@RestController 自動(dòng)將方法返回的對(duì)象序列化為 JSON 或 XML 格式。
2.@RestController與@Controller的區(qū)別
特性 | @RestController | @Controller |
---|---|---|
返回值默認(rèn)行為 | 數(shù)據(jù)直接寫入響應(yīng)體(默認(rèn)返回 JSON)。 | 視圖解析,返回頁面模板(如 JSP、HTML)。 |
是否需要 @ResponseBody | 不需要額外標(biāo)注,自動(dòng)序列化返回值。 | 若需返回?cái)?shù)據(jù)而非頁面,需要加 @ResponseBody。 |
示例:
@RestController 示例
@RestController public class UserController { @GetMapping("/user") public User getUser() { return new User("John", 25); } }
返回結(jié)果為 JSON:
{ "name": "John", "age": 25 }
@Controller 示例
@Controller public class PageController { @GetMapping("/page") public String getPage() { return "home"; // 返回頁面模板名稱,如 home.html } }
3.如何使用@RestController
3.1 基本使用
以下是一個(gè)完整的使用案例,展示如何創(chuàng)建一個(gè)返回 JSON 數(shù)據(jù)的接口。
實(shí)體類
public class User { private String name; private int age; public User(String name, int age) { this.name = name; this.age = age; } // Getters and Setters public 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; } }
控制器類
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api") public class UserController { @GetMapping("/user") public User getUser() { return new User("Alice", 30); } }
啟動(dòng)類
確保項(xiàng)目啟動(dòng)時(shí),Spring Boot 能掃描到 @RestController
標(biāo)注的類。
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
結(jié)果:
訪問 http://localhost:8080/api/user
,將返回:
{ "name": "Alice", "age": 30 }
3.2 參數(shù)傳遞
通過 URL 參數(shù)
@RestController @RequestMapping("/api") public class UserController { @GetMapping("/user") public String getUserByName(@RequestParam String name) { return "Hello, " + name; } }
訪問 http://localhost:8080/api/user?name=Tom
,返回:
Hello, Tom
通過路徑變量
@RestController @RequestMapping("/api") public class UserController { @GetMapping("/user/{id}") public String getUserById(@PathVariable int id) { return "User ID: " + id; } }
訪問 http://localhost:8080/api/user/123
,返回:
User ID: 123
3.3 POST 請(qǐng)求
在 RESTful 接口中,POST
通常用于創(chuàng)建資源。以下是處理 POST
請(qǐng)求的示例:
import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api") public class UserController { @PostMapping("/user") public String createUser(@RequestBody User user) { return "User " + user.getName() + " created successfully!"; } }
測(cè)試請(qǐng)求:
發(fā)送以下 JSON 數(shù)據(jù)到 http://localhost:8080/api/user
:
{ "name": "John", "age": 28 }
返回結(jié)果:
User John created successfully!
4.常見注解組合
4.1@RequestMapping
@RequestMapping
用于定義請(qǐng)求路徑,可以與 @RestController
配合使用:
@RestController @RequestMapping("/api") public class UserController { @GetMapping("/hello") public String sayHello() { return "Hello, World!"; } }
訪問路徑為 http://localhost:8080/api/hello
。
4.2@GetMapping、@PostMapping等
簡(jiǎn)化了 HTTP 方法的映射:
@GetMapping
:映射 GET 請(qǐng)求。@PostMapping
:映射 POST 請(qǐng)求。@PutMapping
:映射 PUT 請(qǐng)求。@DeleteMapping
:映射 DELETE 請(qǐng)求。
5.最佳實(shí)踐
使用統(tǒng)一的 API 前綴
為 REST 接口添加統(tǒng)一的前綴(如 /api
),便于接口管理:
@RestController @RequestMapping("/api/v1") public class UserController { ... }
返回自定義響應(yīng)格式
使用統(tǒng)一響應(yīng)結(jié)構(gòu),便于前后端協(xié)作:
public class ApiResponse<T> { private int code; private String message; private T data; public ApiResponse(int code, String message, T data) { this.code = code; this.message = message; this.data = data; } // Getters and Setters } @RestController @RequestMapping("/api") public class UserController { @GetMapping("/user") public ApiResponse<User> getUser() { User user = new User("Alice", 30); return new ApiResponse<>(200, "Success", user); } }
異常處理
通過 @RestControllerAdvice
實(shí)現(xiàn)全局異常處理:
@RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) public ApiResponse<String> handleException(Exception e) { return new ApiResponse<>(500, "Internal Server Error", e.getMessage()); } }
6.總結(jié)
@RestController
是 Spring 提供的 RESTful Web 開發(fā)核心注解,它大大簡(jiǎn)化了返回 JSON 數(shù)據(jù)的接口開發(fā)流程。通過結(jié)合其他注解(如 @GetMapping
、@PostMapping
),開發(fā)者可以快速構(gòu)建強(qiáng)大、靈活的 RESTful API。
到此這篇關(guān)于Spring中@RestController注解的使用實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Spring @RestController內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Spring注解@RestControllerAdvice原理解析
- springboot @Controller和@RestController的區(qū)別及應(yīng)用詳解
- SpringBoot http請(qǐng)求注解@RestController原理解析
- SpringBoot的@RestControllerAdvice作用詳解
- SpringBoot常用注解@RestControllerAdvice詳解
- Spring中@RestControllerAdvice注解的使用詳解
- Spring中的@RestController注解詳細(xì)解析
- Spring @RestController注解組合實(shí)現(xiàn)方法解析
- springboot中@RestController注解實(shí)現(xiàn)
相關(guān)文章
Spring Boot攔截器實(shí)現(xiàn)步驟及測(cè)試實(shí)例
這篇文章主要介紹了Spring Boot攔截器實(shí)現(xiàn)步驟及測(cè)試實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04springboot集成開發(fā)實(shí)現(xiàn)商場(chǎng)秒殺功能
這篇文章主要介紹了springboot集成實(shí)現(xiàn)商品秒殺功能,秒殺系統(tǒng)業(yè)務(wù)流程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12Redis?+?Java攔截器實(shí)現(xiàn)用戶匿名和非匿名訪問
本文主要介紹了Redis?+?Java攔截器實(shí)現(xiàn)用戶匿名和非匿名訪問,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06詳解MyBatis Generator自動(dòng)創(chuàng)建代碼(dao,mapping,poji)
這篇文章主要介紹了詳解MyBatis Generator自動(dòng)創(chuàng)建代碼(dao,mapping,poji)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10java selenium Selenium IDE介紹及用法
本文主要介紹java selenium Selenium IDE,這里整理了相關(guān)資料和介紹如何安裝 Selenium IDE和使用方法,有需要的小伙伴可以參考下2016-08-08Java中增強(qiáng)for循環(huán)的實(shí)現(xiàn)原理和坑詳解
增強(qiáng)的for循環(huán)是在傳統(tǒng)的for循環(huán)中增加的強(qiáng)大的迭代功能的循環(huán),是在jdk1.5之后提出來的。下面這篇文章主要給大家介紹了關(guān)于Java中增強(qiáng)for循環(huán)的實(shí)現(xiàn)原理和坑的相關(guān)資料,需要的朋友可以參考下2018-04-04