最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring中@RestController注解的使用實(shí)現(xiàn)

 更新時(shí)間:2025年08月22日 10:42:40   作者:Hello-ZHE  
@RestController是SpringMVC中用于構(gòu)建RESTful Web服務(wù)的核心注解,結(jié)合@Controller和@ResponseBody功能,自動(dòng)將方法返回值序列化為JSON/XML,感興趣的可以了解一下

@RestController 是 Spring MVC 中常用的注解,通常用于構(gòu)建 RESTful Web 服務(wù)。它是 @Controller 和 @ResponseBody 的組合,簡化了開發(fā) RESTful 接口的流程。

本文將詳細(xì)介紹 @RestController 的使用場景、原理以及具體案例。

1.@RestController的作用

@RestController 的主要作用是將類標(biāo)記為一個(gè) RESTful 控制器。

  • 類中的每個(gè)方法返回的數(shù)據(jù)會(huì)直接寫入 HTTP 響應(yīng)體(Response Body)。
  • 默認(rèn)不需要額外使用 @ResponseBody 注解。

簡而言之:@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!";
    }
}

測試請(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等

簡化了 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ā)核心注解,它大大簡化了返回 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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot全局異常捕獲及try catch區(qū)別解析

    Springboot全局異常捕獲及try catch區(qū)別解析

    這篇文章主要介紹了Springboot全局異常捕獲及try catch區(qū)別解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Java如何不解壓讀取.zip的文件內(nèi)容

    Java如何不解壓讀取.zip的文件內(nèi)容

    這篇文章主要給大家介紹了關(guān)于Java如何不解壓讀取.zip的文件內(nèi)容的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • java隨機(jī)驗(yàn)證碼生成實(shí)現(xiàn)實(shí)例代碼

    java隨機(jī)驗(yàn)證碼生成實(shí)現(xiàn)實(shí)例代碼

    這篇文章主要介紹了java隨機(jī)驗(yàn)證碼生成實(shí)現(xiàn)實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • springboot結(jié)合mybatis操作事務(wù)配置的處理

    springboot結(jié)合mybatis操作事務(wù)配置的處理

    在操作數(shù)據(jù)庫的時(shí)候,經(jīng)常會(huì)使用事務(wù)的處理,本文主要介紹了springboot結(jié)合mybatis操作事務(wù)配置的處理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • Java實(shí)現(xiàn)滑動(dòng)驗(yàn)證碼生成(后端工具類)

    Java實(shí)現(xiàn)滑動(dòng)驗(yàn)證碼生成(后端工具類)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)滑動(dòng)驗(yàn)證碼生成功能中的后端工具類部分,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-10-10
  • 使用Java校驗(yàn)SQL語句的合法性五種解決方案

    使用Java校驗(yàn)SQL語句的合法性五種解決方案

    這篇文章主要介紹了如何用java校驗(yàn)SQL語句的合法性(提供五種解決方案),使用JDBC?API和JSqlParser庫、正則表達(dá)式、ANTLR解析器生成器或Apache?Calcite庫都可以實(shí)現(xiàn)校驗(yàn)SQL語句的合法性,需要的朋友可以參考下
    2023-04-04
  • Java的類型擦除式泛型詳解

    Java的類型擦除式泛型詳解

    Java語言中的泛型只存在于程序源碼之中,在編譯后的字節(jié)碼文件里,則全部泛型都會(huì)被替換為原來的原始類型(Raw Type),并且會(huì)在相應(yīng)的地方插入強(qiáng)制轉(zhuǎn)型的代碼。這篇文章主要介紹了Java的類型擦除式泛型,需要的朋友可以參考下
    2021-08-08
  • 簡單了解SpringCloud運(yùn)行原理

    簡單了解SpringCloud運(yùn)行原理

    這篇文章主要介紹了簡單了解SpringCloud運(yùn)行原理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • java向上轉(zhuǎn)型與向下轉(zhuǎn)型詳解

    java向上轉(zhuǎn)型與向下轉(zhuǎn)型詳解

    這篇文章主要為大家詳細(xì)介紹了java向上轉(zhuǎn)型與向下轉(zhuǎn)型,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • win10下定時(shí)運(yùn)行與開機(jī)自啟動(dòng)jar包的方法記錄

    win10下定時(shí)運(yùn)行與開機(jī)自啟動(dòng)jar包的方法記錄

    這篇文章主要給大家介紹了關(guān)于win10下定時(shí)運(yùn)行與開機(jī)自啟動(dòng)jar包的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評(píng)論

康定县| 沅江市| 逊克县| 海南省| 孝昌县| 隆德县| 凌云县| 尚志市| 长宁县| 南投县| 阳春市| 德令哈市| 宁陕县| 建宁县| 民和| 罗江县| 岳池县| 延川县| 和田县| 湘西| 鄂尔多斯市| 柘荣县| 长丰县| 从化市| 镇平县| 日照市| 抚宁县| 耒阳市| 吉林省| 迭部县| 安化县| 娱乐| 峨眉山市| 四平市| 仁寿县| 金门县| 民和| 双桥区| 阿巴嘎旗| 绥德县| 布拖县|