Spring 控制器快速指南

REST,Spring MVC
Remote
0
03:41 PM · Dec 01 ,2025

1. 簡介

在本教程中,我們將重點介紹 Spring MVC 中的核心概念:控制器。

2. 概述

讓我們先退後一步,考察 前端控制器 在典型 Spring 模型視圖控制器 架構中的概念

在較高層面上,主要職責包括:

  • 攔截傳入的請求
  • 將請求的負載轉換為內部數據結構
  • 將數據發送到 模型 進行進一步處理
  • 模型 獲取處理後的數據,並將數據傳遞到 視圖 進行渲染

以下是 Spring MVC 中高層級流程的快速圖表:

SpringMVC

正如我們所看到的,DispatcherServlet 在架構中扮演着 前端控制器 的角色

該圖適用於典型的 MVC 控制器,以及 RESTful 控制器,但存在一些細微差異(見下文所述)

在傳統方法中,MVC 應用程序不是面向服務的;因此,有一個 視圖解析器,用於根據從 控制器 接收的數據渲染最終視圖

RESTful 應用程序旨在面向服務,並返回原始數據(通常是 JSON/XML)。由於這些應用程序不進行任何視圖渲染,因此沒有 視圖解析器,並且通常預期 控制器 通過 HTTP 響應直接發送數據

讓我們從 MVC 風格的控制器開始

3. Maven 依賴項

為了使用 Spring MVC 在 Spring Boot 中,我們首先處理 Maven 依賴項:


    org.springframework.boot
    spring-boot-starter-web
    3.0.2

要獲取庫的最新版本,請查看 spring-boot-starter-web 在 Maven Central

4. Spring Boot Web 配置

現在我們來看如何配置 Spring Boot。由於我們在 classpath 中添加了 thymeleaf 依賴,因此我們不需要為它配置任何 @Beans:


    org.springframework.boot
    spring-boot-starter-thymeleaf

在我們的 WebConfig 中,我們需要為 Greeting 對象和 ObjectMapper 對象添加一個 Bean,以便啓用默認 Servlet:

    @Bean
    public WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> enableDefaultServlet() {
        return factory -> factory.setRegisterDefaultServlet(true);
    }

    @Bean
    public Greeting greeting() {
        Greeting greeting = new Greeting();
        greeting.setMessage("Hello World !!");
        return greeting;
    }

    @Bean
    public ObjectMapper objectMapper() {
        return new ObjectMapper();
    }

例如,如果 Controller 返回名為 “welcomeview,則 view resolver 將嘗試在 templates 文件夾中搜索名為 “welcome.html” 的頁面。這是 thymeleaf 默認搜索視圖的文件夾。

5. MVC 控制器

現在,我們終於實現了 MVC 風格的控制器。

請注意,我們返回了一個 ModelAndView 對象,其中包含一個 模型映射 和一個 視圖對象,這兩個對象將由 視圖解析器 用於數據渲染:

@Controller
@RequestMapping(value = "/test")
public class TestController {

    @GetMapping
    public ModelAndView getTestData() {
        ModelAndView mv = new ModelAndView();
        mv.setViewName("welcome");
        mv.getModel().put("data", "Welcome home man");

        return mv;
    }
}

那麼,我們設置了什麼呢。

首先,我們創建了一個名為 TestController 的控制器,並將其映射到 “/test” 路徑。 在類中,我們創建了一個返回 ModelAndView 對象的 方法,該方法映射到 GET 請求。 因此,以 “test” 結尾的任何 URL 調用都將由 DispatcherServlet 路由到 getTestData 方法 在 TestController 中。

當然,我們返回了帶有模型數據的 ModelAndView 對象,以備不時之需。

視圖對象已設置為 “welcome”。 如上所述,視圖解析器 將在 templates 文件夾中搜索名為 “welcome.html” 的頁面。

下面是 GET 操作的示例結果:

Welcome

6. REST 控制器

構建 Spring RESTful

應用程序的設置與 MVC

應用程序的設置相同,唯一的區別在於沒有 View Resolvers

model map

API 通常會將原始數據返回給客户端,通常是 XML

JSON

表示形式,因此 DispatcherServlet

會繞過 view resolvers

直接在 HTTP 響應體中返回數據

讓我們來看一個簡單的 RESTful 控制器實現:

@RestController
public class RestController {

    @GetMapping(value = "/student/{studentId}")
    public Student getTestData(@PathVariable Integer studentId) {
        Student student = new Student();
        student.setName("Peter");
        student.setId(studentId);

        return student;
    }
}

我們可以看到以下輸出的快照:

Student Endpoint

上述輸出是發送 GET

請求到 API 並使用學生 id

的結果,即 1

這裏有一個快速説明是,@RequestMapping

註解是那些核心註解之一,我們需要深入瞭解才能充分發揮其潛力。

7. 結論

在本文中,我們探討了 Spring Boot 中使用控制器的基本原理,既從典型的 MVC 應用程序的角度,也從 RESTful API 的角度進行了研究。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.