欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring?MVC??接受請求參數的方法

 更新時間:2024年09月25日 09:48:44   作者:想進大廠的小王  
了解HTTP請求的GET和POST方法中如何攜帶參數,以及SpringMVC中如何接收這些參數,GET方法通過URL傳遞參數,而POST方法通常在請求體中傳遞,SpringMVC使用注解如@RequestParam和@RequestBody來綁定參數到控制器方法

一、HTTP 請求 如何攜帶參數

在HTTP請求中攜帶參數的方式取決于你使用的請求方法。常見的HTTP方法有GET和POST,參數傳遞的方式也有所不同:

1. GET 方法

GET方法通常用于請求服務器發(fā)送資源,參數直接附加在URL之后,通過?分隔URL和參數,多個參數之間用&連接。例如:

GET /search?query=網絡安全&sort=latest HTTP/1.1
Host: www.example.com

這里,URL是/search,參數有兩個:

  • query=網絡安全
  • sort=latest

2. POST 方法

POST方法通常用于提交數據到服務器。與GET方法不同,POST方法通常將參數包含在請求體中,不顯示在URL中(但是普通的參數也可以出現(xiàn)在URL中)。只有form 表單在post 請求中固定在 body、get 出現(xiàn)在url 中。這樣可以發(fā)送更大的數據量,也更安全。參數可以以不同的格式發(fā)送,常見的有:

表單數據(application/x-www-form-urlencoded

數據以鍵值對形式發(fā)送,鍵值對之間用&分隔,鍵和值之間用=連接,類似于URL查詢字符串。例如:

POST /submit HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 27
username=alice&password=1234

JSON數據(application/json

數據以JSON格式發(fā)送,適用于復雜結構的數據交換。例如:

POST /api/data HTTP/1.1
Host: www.example.com
Content-Type: application/json
Content-Length: 47
{"username": "alice", "password": "1234"}

雖然GET和POST是最常見的,但HTTP協(xié)議還支持其他方法,如PUT、DELETE等,這些方法也可以攜帶參數,通常是在請求體中,格式可以是表單數據、JSON或其他MIME類型。

小技巧

  • 使用GET方法時,由于URL長度存在限制,不適合傳輸大量信息。
  • 使用POST方法時,可通過適當的Content-Type頭部來控制數據的編碼方式。

二、Spring MVC 接受參數

在 Spring MVC 中,處理來自客戶端的參數有幾種常用的方式。Spring MVC 提供了靈活的方式來接收來自 HTTP 請求的參數,并將其綁定到控制器方法的參數中。這些方法包括使用注解如 @RequestParam, @PathVariable, @RequestBody, 和 @ModelAttribute 等。下面是這些注解的基本使用方法:

1. 使用 @RequestParam

這個注解用于處理來自查詢字符串或表單數據的參數。例如,對于一個 GET 請求,你可以這樣使用:

@GetMapping("/search")
public String search(@RequestParam("query") String query) {
    // 使用 query 參數
    return "Result for: " + query;
}

如果你的參數名和方法的參數名相同,你還可以省略 @RequestParam 中的值:

@GetMapping("/search")
public String search(@RequestParam String query) {
    return "Result for: " + query;
}

 如果參數?較多時, ?法聲明就需要有很多形參. 并且后續(xù)每次新增?個參數, 也需要修改?法聲明. 我們不妨把這些參數封裝為?個對象.

@Data
public class Person {
 private int id;
 private String name;
 private String password;
}
@RequestMapping("/m3")
public Object method3(Person p){
 return p.toString();
}

2. 使用 @PathVariable

用于處理 REST 風格的 URL 中的參數,如:

@GetMapping("/users/{userId}")
public String getUser(@PathVariable("userId") Long userId) {
    // 使用 userId 參數
    return "User profile for ID: " + userId;
}

如果變量名和參數名相同,也可以省略:

@GetMapping("/users/{userId}")
public String getUser(@PathVariable Long userId) {
    return "User profile for ID: " + userId;
}

3. 使用 @RequestBody

這個注解用于處理 JSON 或 XML 等請求體數據。通常與 POST 或 PUT 請求一起使用:

@PostMapping("/users")
public String addUser(@RequestBody User user) {
    // 處理 user 對象
    return "Added user with ID: " + user.getId();
}

4. 使用 @ModelAttribute

用于綁定請求參數到一個模型對象,通常用于處理表單提交:

@PostMapping("/users/update")
public String updateUser(@ModelAttribute User user) {
    // 更新 user 對象
    return "Updated user with ID: " + user.getId();
}

5.傳遞數組和集合

Spring MVC 可以?動綁定數組參數的賦值

@RequestMapping("/m5")
public String method5(String[] arrayParam) {
 return Arrays.toString(arrayParam);
}

集合參數:和數組類似, 同?個請求參數名有為多個, 且需要使? @RequestParam 綁定參數關系 默認情況下,請求中參數名相同的多個值,是封裝到數組. 如果要封裝到集合,要使? @RequestParam 綁定參數關系 

6.接受String 轉成 Json

Jackson 是在 Spring 框架中常用的 JSON 處理庫。要使用 Jackson 進行 JSON 與字符串的互轉,首先需要在你的項目中添加 Jackson 的依賴。如果你使用 Maven,可以添加如下依賴到你的 pom.xml 文件:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.12.3</version>
</dependency>

在 Spring MVC 中,直接使用字符串來接收參數后再手動處理確實是一種可行的方法,尤其是在某些情況下,你可能想對接收到的數據進行特殊處理,或者原始數據格式與你的業(yè)務邏輯需求不完全匹配時。這種方式提供了更大的靈活性,允許你在將數據轉換成 Java 對象之前,先進行驗證、清洗或者格式化。

import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonUtil {
    public static String toJson(Object obj) throws Exception {
        ObjectMapper mapper = new ObjectMapper();
        return mapper.writeValueAsString(obj);
    }
}
// 使用
Person person = new Person("Alice", 30);
String jsonString = JsonUtil.toJson(person);
System.out.println(jsonString);

例如,如果你希望接收一個 JSON 格式的請求體,但暫時不想將其自動綁定到一個 Java 對象,你可以將請求體作為一個普通的字符串接收:

@PostMapping("/api/data")
public ResponseEntity<String> processData(@RequestBody String rawData) {
    try {
        // 手動解析 JSON 字符串
        ObjectMapper mapper = new ObjectMapper();
        JsonNode rootNode = mapper.readTree(rawData);
        // 假設我們需要處理 name 字段
        String name = rootNode.path("name").asText();
        // 進行業(yè)務邏輯處理
        return ResponseEntity.ok("Received name: " + name);
    } catch (JsonProcessingException e) {
        return ResponseEntity.badRequest().body("Invalid JSON");
    }
}

三、常見問題 

在 Spring MVC 中,當你使用基本數據類型(如 int, double, boolean 等)作為方法參數時,確實可能遇到一些問題,尤其是涉及到參數可能不存在或可選的情況。這是因為基本數據類型不能接受 null 值,而包裝類(如 Integer, Double, Boolean 等)可以接受 null 值。

假設你有一個使用基本數據類型參數的方法:

@GetMapping("/calculate")
public String calculate(@RequestParam("number") int number) {
    // 使用 number 參數
    return "Result: " + number * 2;
}

如果 HTTP 請求沒有提供 number 參數,Spring MVC 將嘗試將 null 轉換為基本類型 int,這將失敗并引發(fā)一個異常,因為基本類型不能接受 null 值。

解決方案

1.使用包裝類

更改參數為相應的包裝類可以解決這個問題,因為包裝類可以接受 null 值:

@GetMapping("/calculate")
public String calculate(@RequestParam("number") Integer number) {
    if (number == null) {
        return "Number parameter is missing";
    }
    return "Result: " + number * 2;
}

2.設置默認值

另一個常用的解決方案是為 @RequestParam 設置一個默認值,這樣如果請求中沒有提供該參數,將使用默認值:

@GetMapping("/calculate")
public String calculate(@RequestParam(value = "number", defaultValue = "0") int number) {
    // 無需檢查 null,因為已經有默認值
    return "Result: " + number * 2;
}

在這個例子中,如果沒有提供 number 參數,number 將默認為 0。

3.設置 required 為 false

你也可以將 @RequestParamrequired 屬性設置為 false,并使用包裝類來明確表明這個參數是可選的:

@GetMapping("/calculate")
public String calculate(@RequestParam(value = "number", required = false) Integer number) {
    if (number == null) {
        return "Number parameter is optional";
    }
    return "Result: " + number * 2;
}

到此這篇關于Spring MVC 接受請求參數的文章就介紹到這了,更多相關Spring MVC 請求參數內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Spring中的@ControllerAdvice和@ExceptionHandler注解處理全局異常

    Spring中的@ControllerAdvice和@ExceptionHandler注解處理全局異常

    這篇文章主要介紹了Spring中的@ControllerAdvice和@ExceptionHandler注解處理全局異常,@ControllerAdvice ,@ControllerAdvice是一個非常有用的注解,顧名思義,這是一個增強的 Controller,一般配合@ExceptionHandler使用來處理全局異常,需要的朋友可以參考下
    2024-01-01
  • Java實現(xiàn)BP神經網絡MNIST手寫數字識別的示例詳解

    Java實現(xiàn)BP神經網絡MNIST手寫數字識別的示例詳解

    這篇文章主要為大家詳細介紹了Java實現(xiàn)BP神經網絡MNIST手寫數字識別的相關方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-01-01
  • SpringBoot 自動配置失效的解決方法

    SpringBoot 自動配置失效的解決方法

    本文主要介紹了SpringBoot 自動配置失效的解決方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 淺談js文件引用方式及其同步執(zhí)行與異步執(zhí)行

    淺談js文件引用方式及其同步執(zhí)行與異步執(zhí)行

    下面小編就為大家?guī)硪黄獪\談js文件引用方式及其同步執(zhí)行與異步執(zhí)行。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • 詳解IDEA JUnit5測試套件運行錯誤的問題

    詳解IDEA JUnit5測試套件運行錯誤的問題

    這篇文章主要介紹了詳解IDEA JUnit5測試套件運行錯誤的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • Spring中的@PostConstruct注解使用詳解

    Spring中的@PostConstruct注解使用詳解

    這篇文章主要介紹了Spring中的@PostConstruct注解使用詳解,該注解被用來修飾一個非靜態(tài)的void方法,被@PostConstruct修飾的方法會在服務器加載Servlet的時候運行,并且只會被服務器執(zhí)行一次,需要的朋友可以參考下
    2023-10-10
  • Java編程實現(xiàn)對象克?。◤椭疲┐a詳解

    Java編程實現(xiàn)對象克?。◤椭疲┐a詳解

    這篇文章主要介紹了Java編程實現(xiàn)對象克?。◤椭疲┐a詳解,涉及了克隆的原因,如何實現(xiàn)克隆,克隆的一般步驟,深克隆與淺克隆的介紹等相關內容,具有一定借鑒價值,需要的朋友可以參考下。
    2017-11-11
  • Springboot打包為Docker鏡像并部署的實現(xiàn)

    Springboot打包為Docker鏡像并部署的實現(xiàn)

    這篇文章主要介紹了Springboot打包為Docker鏡像并部署的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • java Quartz定時器任務與Spring task定時的幾種實現(xiàn)方法

    java Quartz定時器任務與Spring task定時的幾種實現(xiàn)方法

    本篇文章主要介紹了java Quartz定時器任務與Spring task定時的幾種實現(xiàn)方法的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • Tomcat調優(yōu)詳解

    Tomcat調優(yōu)詳解

    這篇文章主要介紹了Tomcat調優(yōu)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04

最新評論