溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中@Controller和@RestController以及@GetMapping和@PostMapping接收參數的格式

發布時間:2021-09-06 18:00:15 來源:億速云 閱讀:238 作者:chen 欄目:大數據
# 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"; // 返回視圖名稱
    }
}

1.2 @RestController

@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。


2. @GetMapping與@PostMapping的參數接收

2.1 @GetMapping參數接收

@GetMapping用于處理HTTP GET請求,參數通常通過URL傳遞。

2.1.1 路徑變量(Path Variable)

@GetMapping("/user/{id}")
public String getUserById(@PathVariable Long id) {
    return "User ID: " + id;
}

2.1.2 請求參數(Query Parameter)

@GetMapping("/user")
public String getUserByName(@RequestParam String name) {
    return "User Name: " + name;
}

2.1.3 對象綁定(自動映射)

@GetMapping("/user/details")
public String getUserDetails(User user) {
    return "User: " + user.getName() + ", Age: " + user.getAge();
}

User類需包含nameage字段,Spring會自動綁定URL參數。

2.2 @PostMapping參數接收

@PostMapping用于處理HTTP POST請求,參數通常通過請求體傳遞。

2.2.1 表單數據(Form Data)

@PostMapping("/user/form")
public String createUser(@RequestParam String name, @RequestParam int age) {
    return "Created User: " + name;
}

2.2.2 JSON請求體(RequestBody)

@PostMapping("/user/json")
public String createUserJson(@RequestBody User user) {
    return "Created User: " + user.getName();
}

2.2.3 混合參數(Path + Body)

@PostMapping("/user/{role}")
public String createUserWithRole(@PathVariable String role, @RequestBody User user) {
    return "Created " + role + " User: " + user.getName();
}

3. 參數接收的常見格式

3.1 基本類型與包裝類

  • @RequestParam支持String、int、Integer等基本類型和包裝類。
  • 若參數未傳,int會報錯,Integer則為null。

3.2 日期類型處理

@GetMapping("/date")
public String parseDate(@RequestParam @DateTimeFormat(pattern="yyyy-MM-dd") Date date) {
    return "Date: " + date;
}

3.3 集合/數組參數

@GetMapping("/list")
public String handleList(@RequestParam List<String> ids) {
    return "IDs: " + ids;
}

URL示例:/list?ids=1&ids=2

3.4 文件上傳(Multipart)

@PostMapping("/upload")
public String uploadFile(@RequestParam MultipartFile file) {
    return "File uploaded: " + file.getOriginalFilename();
}

4. 常見問題與解決方案

4.1 參數缺失處理

@GetMapping("/optional")
public String optionalParam(@RequestParam(required = false) String name) {
    return "Name: " + (name != null ? name : "default");
}

4.2 參數名映射

@GetMapping("/custom")
public String customParam(@RequestParam("user-name") String username) {
    return "Username: " + username;
}

4.3 全局參數驗證

@PostMapping("/validate")
public String validateUser(@Valid @RequestBody User user, BindingResult result) {
    if (result.hasErrors()) {
        return "Validation failed!";
    }
    return "User valid!";
}

5. 總結

注解/場景 參數傳遞方式 適用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格式,可直接用于技術文檔或博客發布。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女