| Jar 包 | 核心功能 |
| spring-core | 核心工具類、資源訪問 |
| spring-beans | IOC 容器基礎實現 |
| spring-context | IOC 擴展、事件、國際化 |
| spring-web | Web 基礎設施、Multipart、ContextLoader |
| spring-webmvc | MVC 實現、DispatcherServlet、ViewResolver |
| spring-aop | AOP 代理、切面編程 |
| spring-expression | SpEL 表達式語言 |
五大核心註解詳解
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 風格最佳實踐
| 操作 | 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/");
}
}
- 上一篇文章: Java 多線程同步進階:synchronized 代碼塊、鎖對象、靜態鎖與內部類鎖機制深度解析
- 下一篇文章: Java 集合框架全景圖譜:List/Set/Map 體系、Fail-Fast 機制與 CopyOnWrite 解決方案
Copyright ©
程式碼之家 All Rights Reserved