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

Spring中@RestController和@Controller的使用及區(qū)別

 更新時間:2025年03月22日 10:20:18   作者:HinINAX  
這篇文章主要介紹了Spring中@RestController和@Controller的使用及區(qū)別,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Spring中@RestController和@Controller使用及區(qū)別

@RestControllerSpring Web 提供的一個用來開發(fā) RESTful Web 服務(wù)的關(guān)鍵注解,它是 @Controller@ResponseBody 的組合注解。通過 @RestController,我們可以實現(xiàn)處理 HTTP 請求并直接返回 JSON、XML 或其他格式的數(shù)據(jù),而不是返回視圖頁面。

以下是對 @RestController 注解的詳細解析:

1. 基本定義

@RestController 的作用

  • 它是一個 標(biāo)記類 的注解,標(biāo)識該類是一個 Spring MVC 控制器,且所有方法的返回值會直接作為 HTTP 響應(yīng)體(Response Body)。
  • 可以用來簡化 RESTful API 的開發(fā)。

注解的來源

@RestController 是 Spring 4.0 引入的,屬于 org.springframework.web.bind.annotation 包。

組合關(guān)系

它相當(dāng)于 @Controller@ResponseBody 的組合:

@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
}

@Controller

  • 標(biāo)識當(dāng)前類是一個 Spring MVC 控制器,用于處理 HTTP 請求。

@ResponseBody

  • 方法的返回值不會被解析為視圖名稱,而是直接寫入 HTTP 響應(yīng)體中。

2. 使用場景

@RestController 一般用于開發(fā) RESTful 風(fēng)格的服務(wù)接口,如前后端分離的項目中,前端通過 AJAX 或其他 Http 客戶端調(diào)用后端接口,獲取 JSON 或 XML 數(shù)據(jù)。

@Controller 的區(qū)別在于:

  • @RestController 專注于返回數(shù)據(jù)(如 JSON、XML)。
  • @Controller 通常用于返回視圖頁面(如 HTML、JSP)。

3. 使用示例

示例 1:創(chuàng)建一個簡單的 RESTful API

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/users")
public class UserController {

    // GET 請求,獲取用戶信息
    @GetMapping("/{id}")
    public String getUserById(@PathVariable("id") Long id) {
        return "User ID: " + id;
    }

    // POST 請求,創(chuàng)建新用戶
    @PostMapping
    public String createUser(@RequestBody String user) {
        return "User created: " + user;
    }
}

請求說明

  1. @RestController 標(biāo)注了 UserController 這個類是 RESTful 控制器。
  2. 返回值直接寫入響應(yīng)體,不需要額外使用 @ResponseBody。
  3. 示例中實現(xiàn)了兩個接口:
    • 獲取用戶信息(GET /api/users/{id})。
    • 創(chuàng)建用戶(POST /api/users)。

4. 與 @Controller 的對比

特性@RestController@Controller
主要用途處理 RESTful Web 服務(wù)請求,返回 JSON 或 XML返回視圖頁面(如 Thymeleaf、JSP 等)。
是否需要使用 @ResponseBody不需要,默認應(yīng)用于所有方法返回值。需要單獨為每個方法標(biāo)注 @ResponseBody。
返回內(nèi)容數(shù)據(jù)(JSON、XML、文本等)。視圖名稱(如 Html 文件)。
使用場景前后端分離的項目。傳統(tǒng) Web 應(yīng)用(如返回 HTML 頁面)。

示例對比:

@RestController 示例

@RestController
@RequestMapping("/api")
public class ApiController {
    @GetMapping("/greeting")
    public String greeting() {
        return "Hello, World!";
    }
}

返回結(jié)果:Hello, World! 作為純文本響應(yīng)。

@Controller 示例

@Controller
@RequestMapping("/web")
public class WebController {
    @GetMapping("/greeting")
    public String greeting() {
        return "greeting"; // 返回視圖名稱
    }
}

返回結(jié)果:渲染名為 greeting.html 的視圖。

5. 常用注解配合使用

5.1 配合 @RequestMapping

@RequestMapping 用于指定類或方法的請求路徑??梢耘c @RestController 配合使用,設(shè)置 RESTful API 的基礎(chǔ)路徑。

示例:

@RestController
@RequestMapping("/api")
public class MyController {
    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, API!";
    }
}

請求路徑:GET /api/hello

5.2 配合 @GetMapping@PostMapping

  • @GetMapping:用于處理 HTTP GET 請求。
  • @PostMapping:用于處理 HTTP POST 請求。

示例:

@RestController
@RequestMapping("/users")
public class UserController {

    // GET 請求
    @GetMapping("/{id}")
    public String getUser(@PathVariable Long id) {
        return "User ID: " + id;
    }

    // POST 請求
    @PostMapping
    public String createUser(@RequestBody String user) {
        return "Created User: " + user;
    }
}

5.3 配合 @RequestBody

@RequestBody 將 JSON 請求體轉(zhuǎn)換為 Java 對象。

示例:

@RestController
@RequestMapping("/books")
public class BookController {

    @PostMapping
    public String createBook(@RequestBody Book book) {
        return "Created Book: " + book.getTitle();
    }
}
class Book {
    private String title;
    private String author;
    // Getter and Setter
}

請求數(shù)據(jù):

{
    "title": "Spring in Action",
    "author": "Craig Walls"
}

5.4 配合 @PathVariable@RequestParam

  • @PathVariable:從請求路徑中獲取變量。
  • @RequestParam:從查詢參數(shù)中獲取值。

示例:

@RestController
@RequestMapping("/products")
public class ProductController {

    @GetMapping("/{id}")
    public String getProduct(@PathVariable Long id, @RequestParam String name) {
        return "Product ID: " + id + ", Name: " + name;
    }
}
  • 請求路徑:GET /products/123?name=Phone
  • 返回結(jié)果:Product ID: 123, Name: Phone

6. 返回 JSON 數(shù)據(jù)

@RestController 默認將返回值序列化為 JSON 格式(如果依賴的 Jackson 庫存在)。

示例:

@RestController
@RequestMapping("/users")
public class UserController {

    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        return new User(id, "John");
    }
}
class User {
    private Long id;
    private String name;
    // Constructor, Getter, Setter
}

返回結(jié)果:

{
    "id": 1,
    "name": "John"
}

7. 常見問題

7.1 返回值無法序列化

  • 如果返回的對象沒有提供 getter 或沒有無參構(gòu)造函數(shù),可能導(dǎo)致 JSON 序列化失敗。
  • 解決方法:確保返回的對象有正確的 getter 和無參構(gòu)造器。

7.2 404 Not Found 錯誤

  • 檢查請求路徑是否正確。
  • 確??刂破黝惡头椒ǖ?@RequestMapping 路徑匹配。

7.3 415 Unsupported Media Type 問題

  • 如果使用 @RequestBody,確保請求頭中有 Content-Type: application/json。

8. 特性總結(jié)

特性描述
組合注解是 @Controller 和 @ResponseBody 的組合。
返回數(shù)據(jù)格式默認返回 JSON 數(shù)據(jù)(需要依賴 Jackson 庫)。
適用場景RESTful API 開發(fā),前后端分離項目接口開發(fā)。
簡化開發(fā)不需要額外為每個方法添加 @ResponseBody。

總結(jié)

  • @RestController 是 Spring Web 提供的一個便捷注解,專用于處理 RESTful API 請求。
  • 它簡化了傳統(tǒng)的 @Controller + @ResponseBody 的開發(fā)方式。
  • 配合其他注解(如 @RequestMapping、@GetMapping、@RequestBody 等)可以快速開發(fā)健壯的 RESTful 服務(wù)。
  • 在前后端分離的應(yīng)用中,@RestController 是必不可少的工具之一。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 利用Java代碼寫一個并行調(diào)用模板

    利用Java代碼寫一個并行調(diào)用模板

    這篇文章主要介紹了利用Java代碼寫一個并行調(diào)用模板,文章基于Java的相關(guān)內(nèi)容展開寫一個并行調(diào)用模板的詳細介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • mybatis新增到數(shù)據(jù)庫后返回當(dāng)前ID問題

    mybatis新增到數(shù)據(jù)庫后返回當(dāng)前ID問題

    這篇文章主要介紹了mybatis新增到數(shù)據(jù)庫后返回當(dāng)前ID問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Java中類的加載器及其加載過程

    Java中類的加載器及其加載過程

    字節(jié)碼文件在類加載器子系統(tǒng)中要進行加載、鏈接、初始化等處理,我們這里詳細來談其中過程,本文主要介紹了Java中類的加載器及其加載過程,感興趣的同學(xué)可以參考一下
    2023-04-04
  • Spring4改造Dubbo實現(xiàn)注解配置兼容的完整指南

    Spring4改造Dubbo實現(xiàn)注解配置兼容的完整指南

    在微服務(wù)架構(gòu)中,Dubbo作為一款高性能的Java RPC框架,被廣泛應(yīng)用于分布式系統(tǒng)中,本文將探討如何改造Dubbo,使其能夠更好地兼容Spring4的注解配置
    2025-07-07
  • nacos單機版啟動失敗問題以及解決

    nacos單機版啟動失敗問題以及解決

    這篇文章主要介紹了nacos單機版啟動失敗問題以及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Jvisualvm監(jiān)控遠程SpringBoot項目的過程詳解

    Jvisualvm監(jiān)控遠程SpringBoot項目的過程詳解

    這篇文章主要介紹了Jvisualvm監(jiān)控遠程SpringBoot項目,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • 淺談SpringBoot優(yōu)化技巧

    淺談SpringBoot優(yōu)化技巧

    這篇文章主要介紹了淺談SpringBoot優(yōu)化技巧,需要的朋友可以參考下。
    2017-09-09
  • MyBatis參數(shù)處理模塊用法及解讀

    MyBatis參數(shù)處理模塊用法及解讀

    MyBatis參數(shù)處理模塊是核心處理層的關(guān)鍵環(huán)節(jié),負責(zé)將Java對象參數(shù)轉(zhuǎn)換為JDBC參數(shù)類型,并設(shè)置到PreparedStatement中,主要職責(zé)包括參數(shù)設(shè)置流程、參數(shù)類型轉(zhuǎn)換和參數(shù)映射處理
    2026-01-01
  • Mybatis插件PageHelper的實現(xiàn)原理詳解

    Mybatis插件PageHelper的實現(xiàn)原理詳解

    PageHelper 是一款開源的 MyBatis 分頁插件,可以在實際應(yīng)用中方便地實現(xiàn)分頁功能,這篇文章主要來和大家講講PageHelper的原理與使用,需要的可以參考下
    2023-06-06
  • SpringMVC視圖轉(zhuǎn)發(fā)重定向區(qū)別及控制器詳解

    SpringMVC視圖轉(zhuǎn)發(fā)重定向區(qū)別及控制器詳解

    這篇文章主要為大家介紹了SpringMVC視圖轉(zhuǎn)發(fā)重定向區(qū)別及控制器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05

最新評論

石嘴山市| 信阳市| 平定县| 晋城| 林芝县| 焦作市| 察雅县| 青海省| 大名县| 万盛区| 兴海县| 开封市| 新田县| 唐河县| 芦山县| 瑞昌市| 广平县| 林甸县| 睢宁县| 普陀区| 湖口县| 武冈市| 昌江| 星子县| 化州市| 中方县| 安龙县| 望城县| 长岛县| 桓台县| 侯马市| 米脂县| 赤壁市| 清流县| 龙陵县| 浏阳市| 阜平县| 昆山市| 巩留县| 双柏县| 凤台县|