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

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

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

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

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

以下是對 @RestController 注解的詳細(xì)解析:

1. 基本定義

@RestController 的作用

  • 它是一個(gè) 標(biāo)記類 的注解,標(biāo)識(shí)該類是一個(gè) Spring MVC 控制器,且所有方法的返回值會(huì)直接作為 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)識(shí)當(dāng)前類是一個(gè) Spring MVC 控制器,用于處理 HTTP 請求。

@ResponseBody

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

2. 使用場景

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

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

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

3. 使用示例

示例 1:創(chuàng)建一個(gè)簡單的 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 這個(gè)類是 RESTful 控制器。
  2. 返回值直接寫入響應(yīng)體,不需要額外使用 @ResponseBody。
  3. 示例中實(shí)現(xiàn)了兩個(gè)接口:
    • 獲取用戶信息(GET /api/users/{id})。
    • 創(chuàng)建用戶(POST /api/users)。

4. 與 @Controller 的對比

特性@RestController@Controller
主要用途處理 RESTful Web 服務(wù)請求,返回 JSON 或 XML返回視圖頁面(如 Thymeleaf、JSP 等)。
是否需要使用 @ResponseBody不需要,默認(rèn)應(yīng)用于所有方法返回值。需要單獨(dú)為每個(gè)方法標(biāo)注 @ResponseBody。
返回內(nèi)容數(shù)據(jù)(JSON、XML、文本等)。視圖名稱(如 Html 文件)。
使用場景前后端分離的項(xiàng)目。傳統(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 默認(rèn)將返回值序列化為 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 錯(cuò)誤

  • 檢查請求路徑是否正確。
  • 確保控制器類和方法的 @RequestMapping 路徑匹配。

7.3 415 Unsupported Media Type 問題

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

8. 特性總結(jié)

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

總結(jié)

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

    nacos單機(jī)版啟動(dòng)失敗問題以及解決

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

    Jvisualvm監(jiān)控遠(yuǎn)程SpringBoot項(xiàng)目的過程詳解

    這篇文章主要介紹了Jvisualvm監(jiān)控遠(yuǎn)程SpringBoot項(xiàng)目,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    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é),負(fù)責(zé)將Java對象參數(shù)轉(zhuǎn)換為JDBC參數(shù)類型,并設(shè)置到PreparedStatement中,主要職責(zé)包括參數(shù)設(shè)置流程、參數(shù)類型轉(zhuǎn)換和參數(shù)映射處理
    2026-01-01
  • Mybatis插件PageHelper的實(shí)現(xiàn)原理詳解

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

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

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

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

最新評論

长海县| 五大连池市| 江达县| 从江县| 绥滨县| 阜宁县| 广州市| 望奎县| 于都县| 福建省| 全椒县| 菏泽市| 奉化市| 衡水市| 增城市| 和政县| 广汉市| 卢龙县| 广汉市| 徐州市| 菏泽市| 石河子市| 永州市| 玉溪市| 连山| 太康县| 林芝县| 密云县| 全椒县| 杭州市| 泌阳县| 辰溪县| 宁津县| 永新县| 绥棱县| 南开区| 南宫市| 湄潭县| 浮山县| 重庆市| 仁怀市|