首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring MVC 核心原理與常用註解深度解析:@Controller、@RequestMapping、@ResponseBody 實戰指南

     編輯:Java 綜合教學

Spring MVC 請求處理流程

  1. 用戶發起請求(如 /user/list)
  2. DispatcherServlet 攔截,委派 HandlerMapping 查找 Controller
  3. 執行 Controller 方法,返回視圖名或 ModelAndView
  4. ViewResolver 解析視圖(JSP/Thymeleaf/JSON)
  5. 渲染視圖,響應客戶端

核心 Jar 包職責

五大核心註解詳解

1. @Controller:標識控制器 Bean

@Controller
@RequestMapping("/user") // 類級別路徑前綴
public class UserController {
    // 單例模式,線程不安全,避免實例變量保存請求狀態
}

配合 <context:component-scan base-package="com.controller" /> 自動掃描註冊。

2. @RequestMapping:請求映射瑞士軍刀

// 類級別:模塊前綴
@RequestMapping("/api/v1/users")

// 方法級別:具體端點
@RequestMapping(
    value = "/{id}",           // 路徑模板
    method = RequestMethod.GET, // HTTP 方法限制
    params = "detail=true",     // 請求參數條件
    headers = "Accept=application/json", // 請求頭條件
    consumes = "application/json",       // Content-Type
    produces = "application/json"        // Accept
)
public User getUser(@PathVariable Long id) { ... }

REST 風格最佳實踐

Jar 包核心功能
spring-core核心工具類、資源訪問
spring-beansIOC 容器基礎實現
spring-contextIOC 擴展、事件、國際化
spring-webWeb 基礎設施、Multipart、ContextLoader
spring-webmvcMVC 實現、DispatcherServlet、ViewResolver
spring-aopAOP 代理、切面編程
spring-expressionSpEL 表達式語言
操作HTTP 方法路徑模板說明
查詢列表GET/users支持分頁、篩選參數
查詢詳情GET/users/{id}路徑變量綁定
創建POST/users@RequestBody 接收 JSON
更新PUT/PATCH/users/{id}完整/部分更新
刪除DELETE/users/{id}冪等操作

3. @RequestParam / @PathVariable / @RequestBody:參數綁定三劍客

 list(
    @RequestParam(defaultValue = "1") int page,
    @RequestParam(defaultValue = "20") int size
)

// 路徑變量:/users/1001
@GetMapping("/users/{id}")
public User get(@PathVariable Long id)

// JSON Body:POST /users
@PostMapping("/users")
public User create(@RequestBody @Valid UserDTO dto)

// 多文件上傳
@PostMapping("/upload")
public Result upload(@RequestParam("files") MultipartFile[] files)

4. @ResponseBody:直接輸出響應體

  • 作用:返回對象經 HttpMessageConverter 序列化寫入 HTTP Body
  • 適用:REST API 返回 JSON/XML、文件下載、流式響應
  • 配合 @RestController = @Controller + @ResponseBody(類級別生效)

5. @SessionAttributes / @ModelAttribute:會話與模型綁定

 loadCategories() {
        return categoryService.findAll();
    }
    
    // 參數級:從 Session/模型/請求參數綁定
    @PostMapping("/order")
    public String submit(@ModelAttribute("cart") Cart cart) { ... }
}

常見問題與避坑

  • @RequestBody 與 Multipart 衝突:文件上傳用 @RequestParam(MultipartFile),不可用 @RequestBody
  • GET 請求無 Body:@RequestBody 僅支持 POST/PUT/PATCH
  • 路徑變量類型轉換失敗:自定義 Formatter 或 Converter
  • 響應編碼亂碼:配置 StringHttpMessageConverter 默認編碼 UTF-8

配置類現代化寫法

@Configuration
@EnableWebMvc
@ComponentScan("com.controller")
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void configureMessageConverters(List> converters) {
        converters.add(new MappingJackson2HttpMessageConverter());
    }
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addHandler("/static/**").addResourceLocations("classpath:/static/");
    }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved