最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring?MVC??接受請求參數(shù)的方法

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

一、HTTP 請求 如何攜帶參數(shù)

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

1. GET 方法

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

GET /search?query=網(wǎng)絡(luò)安全&sort=latest HTTP/1.1
Host: www.example.com

這里,URL是/search,參數(shù)有兩個(gè):

  • query=網(wǎng)絡(luò)安全
  • sort=latest

2. POST 方法

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

表單數(shù)據(jù)(application/x-www-form-urlencoded

數(shù)據(jù)以鍵值對形式發(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數(shù)據(jù)(application/json

數(shù)據(jù)以JSON格式發(fā)送,適用于復(fù)雜結(jié)構(gòu)的數(shù)據(jù)交換。例如:

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等,這些方法也可以攜帶參數(shù),通常是在請求體中,格式可以是表單數(shù)據(jù)、JSON或其他MIME類型。

小技巧

  • 使用GET方法時(shí),由于URL長度存在限制,不適合傳輸大量信息。
  • 使用POST方法時(shí),可通過適當(dāng)?shù)?code>Content-Type頭部來控制數(shù)據(jù)的編碼方式。

二、Spring MVC 接受參數(shù)

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

1. 使用 @RequestParam

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

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

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

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

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

@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 風(fēng)格的 URL 中的參數(shù),如:

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

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

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

3. 使用 @RequestBody

這個(gè)注解用于處理 JSON 或 XML 等請求體數(shù)據(jù)。通常與 POST 或 PUT 請求一起使用:

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

4. 使用 @ModelAttribute

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

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

5.傳遞數(shù)組和集合

Spring MVC 可以?動綁定數(shù)組參數(shù)的賦值

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

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

6.接受String 轉(zhuǎn)成 Json

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

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

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

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);

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

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

三、常見問題 

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

假設(shè)你有一個(gè)使用基本數(shù)據(jù)類型參數(shù)的方法:

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

如果 HTTP 請求沒有提供 number 參數(shù),Spring MVC 將嘗試將 null 轉(zhuǎn)換為基本類型 int,這將失敗并引發(fā)一個(gè)異常,因?yàn)榛绢愋筒荒芙邮?null 值。

解決方案

1.使用包裝類

更改參數(shù)為相應(yīng)的包裝類可以解決這個(gè)問題,因?yàn)榘b類可以接受 null 值:

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

2.設(shè)置默認(rèn)值

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

@GetMapping("/calculate")
public String calculate(@RequestParam(value = "number", defaultValue = "0") int number) {
    // 無需檢查 null,因?yàn)橐呀?jīng)有默認(rèn)值
    return "Result: " + number * 2;
}

在這個(gè)例子中,如果沒有提供 number 參數(shù),number 將默認(rèn)為 0。

3.設(shè)置 required 為 false

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

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

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

相關(guān)文章

最新評論

宿松县| 上思县| 顺义区| 名山县| 临安市| 胶南市| 庄浪县| 陆河县| 绍兴县| 嘉义市| 黄冈市| 策勒县| 峡江县| 东莞市| 长子县| 仪征市| 西平县| 文安县| 灌南县| 舞钢市| 眉山市| 安顺市| 安达市| 榆中县| 华坪县| 凤山县| 耒阳市| 宁武县| 翁源县| 封丘县| 江源县| 略阳县| 宜州市| 宁武县| 邵阳县| 府谷县| 铁力市| 临夏县| 宜君县| 绥德县| 安图县|