# Java中@Controller和@RestController以及@GetMapping和@PostMapping接收參數的格式
## 引言
在Spring框架中,`@Controller`和`@RestController`是構建Web應用程序的核心注解,而`@GetMapping`和`@PostMapping`則用于處理HTTP請求。理解這些注解如何接收和傳遞參數對于開發高效的RESTful API至關重要。本文將詳細探討這些注解的參數接收格式和最佳實踐。
---
## 1. @Controller與@RestController的區別
### 1.1 @Controller
`@Controller`是傳統的Spring MVC控制器注解,通常用于返回視圖名稱(如JSP、Thymeleaf等)。它需要配合視圖解析器工作。
```java
@Controller
@RequestMapping("/demo")
public class DemoController {
@GetMapping("/view")
public String showView(Model model) {
model.addAttribute("message", "Hello, World!");
return "viewPage"; // 返回視圖名稱
}
}
@RestController
是@Controller
和@ResponseBody
的組合,直接返回數據(JSON/XML),適用于RESTful API開發。
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/greet")
public String greet() {
return "Hello, REST!"; // 直接返回字符串(JSON格式)
}
}
關鍵區別:
- @Controller
需要視圖解析器,@RestController
直接序列化返回值。
- @RestController
默認所有方法都帶有@ResponseBody
。
@GetMapping
用于處理HTTP GET請求,參數通常通過URL傳遞。
@GetMapping("/user/{id}")
public String getUserById(@PathVariable Long id) {
return "User ID: " + id;
}
@GetMapping("/user")
public String getUserByName(@RequestParam String name) {
return "User Name: " + name;
}
@GetMapping("/user/details")
public String getUserDetails(User user) {
return "User: " + user.getName() + ", Age: " + user.getAge();
}
User
類需包含name
和age
字段,Spring會自動綁定URL參數。
@PostMapping
用于處理HTTP POST請求,參數通常通過請求體傳遞。
@PostMapping("/user/form")
public String createUser(@RequestParam String name, @RequestParam int age) {
return "Created User: " + name;
}
@PostMapping("/user/json")
public String createUserJson(@RequestBody User user) {
return "Created User: " + user.getName();
}
@PostMapping("/user/{role}")
public String createUserWithRole(@PathVariable String role, @RequestBody User user) {
return "Created " + role + " User: " + user.getName();
}
@RequestParam
支持String
、int
、Integer
等基本類型和包裝類。int
會報錯,Integer
則為null
。@GetMapping("/date")
public String parseDate(@RequestParam @DateTimeFormat(pattern="yyyy-MM-dd") Date date) {
return "Date: " + date;
}
@GetMapping("/list")
public String handleList(@RequestParam List<String> ids) {
return "IDs: " + ids;
}
URL示例:
/list?ids=1&ids=2
@PostMapping("/upload")
public String uploadFile(@RequestParam MultipartFile file) {
return "File uploaded: " + file.getOriginalFilename();
}
@GetMapping("/optional")
public String optionalParam(@RequestParam(required = false) String name) {
return "Name: " + (name != null ? name : "default");
}
@GetMapping("/custom")
public String customParam(@RequestParam("user-name") String username) {
return "Username: " + username;
}
@PostMapping("/validate")
public String validateUser(@Valid @RequestBody User user, BindingResult result) {
if (result.hasErrors()) {
return "Validation failed!";
}
return "User valid!";
}
注解/場景 | 參數傳遞方式 | 適用HTTP方法 |
---|---|---|
@PathVariable |
URL路徑變量 | GET/POST等 |
@RequestParam |
URL查詢參數或表單數據 | GET/POST |
@RequestBody |
JSON/XML請求體 | POST/PUT |
對象自動綁定 | 查詢參數或表單字段匹配 | GET/POST |
通過合理選擇注解和參數接收方式,可以高效地構建靈活、易維護的Spring Web應用程序。
擴展閱讀: - Spring官方文檔 - Web MVC - RESTful API設計指南 “`
這篇文章總計約1500字,涵蓋了參數接收的核心場景和代碼示例,采用Markdown格式,可直接用于技術文檔或博客發布。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。