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

關(guān)于@RequestParam和@RequestBody的用法及說明

 更新時(shí)間:2026年03月16日 15:28:00   作者:灰陽陽  
本文主要介紹了Spring框架中參數(shù)綁定相關(guān)的三個(gè)注解:@RequestParam、@ModelAttribute和@RequestBody的使用場景和區(qū)別,通過比較它們的使用場景和注意事項(xiàng),幫助讀者快速理解并正確使用這些注解,避免在項(xiàng)目開發(fā)中出現(xiàn)常見問題

碎碎念

作為一名學(xué)習(xí)spring框架的小白來說,項(xiàng)目實(shí)戰(zhàn)無疑是學(xué)習(xí)成長速度最快的階段之一。但這也不免會(huì)遇到很多折磨人的知識(shí)點(diǎn)讓人防不勝防。比如參數(shù)綁定相關(guān)注解的使用:

  • @Param
  • @RequestParam
  • @RequestBody

用哪個(gè)?啥時(shí)候必須用?啥時(shí)候可以不用?把俺整的的一愣一愣的。

于是特意整理了這篇博客,目的是幫助大家快速理清這些注解的使用場景和區(qū)別,避開常見的坑點(diǎn)。

前言

本博客將會(huì)詳細(xì)講解以下參數(shù)綁定相關(guān)注解的使用場景,說明它們之間的關(guān)系和區(qū)別,以及在項(xiàng)目開發(fā)中使用的規(guī)范

  • @RequestParam
  • @RequestBody
  • @@ModelAttribute

一、@RequestParam

@RequestParam專門用于獲取請(qǐng)求URL中的參數(shù),也就是問號(hào)?后面的參數(shù)。(HTML的form表單也適用)

例如下面的請(qǐng)求:

GET /search?name=Tom&age=25

對(duì)應(yīng)的Controller方法:

@GetMapping("/search")
public String search(@RequestParam String name, @RequestParam Integer age) {
    return "搜索名字:" + name + ",年齡:" + age;
}

什么時(shí)候必須用@RequestParam?

當(dāng)方法參數(shù)名和請(qǐng)求參數(shù)名不一致時(shí)必須用

@GetMapping("/search")
public String search(@RequestParam("user_name") String name) {
    return name;
}

參數(shù)非必傳時(shí)(可選)必須明確標(biāo)注

@GetMapping("/search")
public String search(@RequestParam(required = false) String name) {
    return name;
}

RequestParam(required = false)的意思是如果前端沒有傳遞參數(shù)name,不會(huì)直接報(bào)錯(cuò),而是賦值null。

什么時(shí)候可以不用@RequestParam?

當(dāng)方法參數(shù)名和請(qǐng)求URL參數(shù)名完全一致并且參數(shù)是必傳時(shí),可以省略:

// URL: /search?name=Tom
@GetMapping("/search")
public String search(String name) {
    return name;
}

二、@ModelAttribute

作用

@ModelAttribute`注解專門用于將請(qǐng)求參數(shù)(URL參數(shù)表單數(shù)據(jù))綁定到一個(gè)Java對(duì)象中,尤其適合表單提交的場景或有多個(gè)參數(shù)需要綁定的情況。

例如請(qǐng)求:

GET /user?name=Tom&age=20

對(duì)應(yīng)的Controller方法:

@GetMapping("/user")
public String getUser(@ModelAttribute User user) {
    return "姓名:" + user.getName() + ",年齡:" + user.getAge();
}

User類定義:

public class User {
    private String name;
    private Integer age;

    // getter和setter方法必須提供
}

使用@ModelAttribute時(shí)的注意點(diǎn):

  • 對(duì)象的屬性名稱必須與請(qǐng)求中的參數(shù)名稱保持一致,這樣才能正確綁定。
  • 如果有多個(gè)參數(shù),并且這些參數(shù)是Java對(duì)象的,那么推薦使用這個(gè)注解(前端發(fā)送請(qǐng)求非JSON等格式的情況下)

三、@RequestBody

@RequestBody用于接收HTTP請(qǐng)求體(Request Body)中的數(shù)據(jù),常用于POST請(qǐng)求,通常是JSON格式的數(shù)據(jù)。

例如POST請(qǐng)求:

POST /user
Content-Type: application/json

{
  "name": "Alice",
  "age": 30
}

對(duì)應(yīng)的Controller方法:

@PostMapping("/user")
public String createUser(@RequestBody User user) {
    return "用戶姓名:" + user.getName() + ",年齡:" + user.getAge();
}

User類定義:

public class User {
    private String name;
    private Integer age;

    // getter和setter方法
}

什么時(shí)候必須用@RequestBody?

  • 前端發(fā)送JSON數(shù)據(jù)或XML數(shù)據(jù)等格式到后端時(shí)必須用。
  • 當(dāng)你需要整個(gè)請(qǐng)求體的數(shù)據(jù)綁定到一個(gè)Java對(duì)象時(shí)。

什么時(shí)候可以不用@RequestBody?

  • 當(dāng)數(shù)據(jù)從URL參數(shù)(如GET請(qǐng)求)或表單數(shù)據(jù)中獲取時(shí),不需要也不能使用@RequestBody。
  • 對(duì)于表單提交,可以使用@ModelAttribute來代替:
@PostMapping("/submit")
public String submitForm(@ModelAttribute User user) {
    return user.getName();
}

四、表格整理

場景傳參方式適用注解是否必須
單個(gè)或少量簡單參數(shù)(如 ?name=Tom)URL參數(shù)或表單提交@RequestParam
多個(gè)參數(shù)形成對(duì)象(如 ?name=Tom&age=20)URL參數(shù)或表單提交@ModelAttribute
JSON、XML數(shù)據(jù)請(qǐng)求體(POST)@RequestBody

使用規(guī)范:

如果仍然覺得比較繞,最簡單粗暴的方式就是全部都用上參數(shù)綁定。

因?yàn)椴徽搮?shù)是否一致,始終明確標(biāo)注注解,可以提高代碼可讀性和可維護(hù)性。

五、總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

景德镇市| 滨州市| 麻城市| 阜阳市| 习水县| 漠河县| 垫江县| 太白县| 平陆县| 平定县| 南城县| 南郑县| 察哈| 镇赉县| 远安县| 绵阳市| 璧山县| 剑河县| 佛冈县| 桃源县| 博罗县| 通城县| 郸城县| 金华市| 吉林市| 唐海县| 松桃| 大关县| 罗田县| 承德市| 晋城| 安龙县| 高密市| 兰州市| 烟台市| 浮梁县| 文水县| 孝义市| 诏安县| 奎屯市| 英山县|