@RequestParam注解詳細使用


前言
在SpringMvc后台進行獲取數據,一般有三種:
1.request.getParameter(“參數名”)
2.用@RequestParam注解獲取
3.Springmvc默認支持的數據類型接收參數,可直接通過controller方法參數對應jsp中請求參數name直接獲取

關於springmvc前后台獲取數據傳遞可以看看我的這篇文章SpringMVC參數綁定學習總結【前后端數據參數傳遞】

1. 作用
簡單一點說作用就是把請求中的指定名稱的參數傳遞給控制器中的形參賦值

2. 屬性
1. value / name:請求參數中的名稱 (必寫參數)
2. required:請求參數中是否必須提供此參數,默認值是true,true為必須提供
3. defaultValue:默認值

關於是value屬性還是name屬性,我想各位應該都遇到過,因此我特地查看過源碼,源碼是這樣寫的

public @interface RequestParam {
@AliasFor("name") String value() default "";

@AliasFor("value") String name() default "";

boolean required() default true;

String defaultValue() default "\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n";
}
1
2
3
4
5
6
7
8
9
可以理解源碼注解的意思就是name的別名是value,value的別名是name。二者皆可,並且開發中兩個都能獲得參數,獲得一樣的結果。

3.使用
使用情況一:@RequestParam注解的 value 屬性值沒有對應上jsp中 name
@RequestParam 注解的value 屬性值沒有對應上jsp中name 值則會直接報400錯誤,因為required 屬性默認為true ,不寫將會使用默認值。

controller測試代碼

@Controller
@RequestMapping("/anno")
public class AnnoController {
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam(value="name") String username){
System.out.println("執行了...");
System.out.println(username);
return "success";
}
1
2
3
4
5
6
7
8
9
jsp測試代碼

<a href="anno/testRequestParam?name123=哈哈">點擊測試RequestParam</a>
1
運行效果:
注意controller中value 屬性值為name,而jsp中參數值為name123,很明顯不一致,所以報錯


使用情況二:上面例子的基礎上加上required=false
在上面例子的基礎上@RequestParam 注解加上required=false ,盡管沒對應上然而不會報錯,而是獲取值為null

controller測試代碼,jsp代碼不變

@Controller
@RequestMapping("/anno")
public class AnnoController {
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam(value="name") String username){
System.out.println("執行了...");
System.out.println(username);
return "success";
}
1
2
3
4
5
6
7
8
9
測試效果


使用情況三:正常運行
不管@RequestParam 注解中加沒加required=false ,只要@RequestParam注解的 value 屬性值對應上jsp中的name或者參數,就能正常運行。

controller測試代碼

@Controller
@RequestMapping("/anno")
public class AnnoController {
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam(value="name") String username){
System.out.println("執行了...");
System.out.println(username);
return "success";
}
1
2
3
4
5
6
7
8
9
jsp代碼

<a href="anno/testRequestParam?name=哈哈">點擊測試RequestParam</a>
1
測試效果:
可以發現,controller中注解value屬性和jsp參數都是為name,對應的上,這個時候required屬性並不能有所影響所以正常運行


4.總結
@RequestParam 注解的value 屬性值沒有對應上jsp中name 值則會直接報400錯誤,因為required 屬性默認為true ,如果加上required=false ,沒對應上則不會報錯,而是獲取值為null 。


4.個人見解
其實可以不使用@RequestParam注解,直接接收,如果不使用該注解要求controller方法中的參數名稱要跟form中name名稱一致,使用該注解只是方便隨意取參數名稱,不過value屬性還是要與name一致,該注解只適合一些任性的盆友使用,最后,該注解依舊有點多此一舉的意蘊。

@RequestParam注解就講到這里,你get了咩?
————————————————
版權聲明:本文為CSDN博主「宜春」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_44543508/java/article/details/101026720


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM