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

淺談@RequestParam 參數(shù)是否必須傳的問題

 更新時間:2021年02月25日 14:33:11   作者:Tonels  
這篇文章主要介紹了淺談@RequestParam 參數(shù)是否必須傳的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

一、源碼展示

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestParam {
 @AliasFor("name")
 String value() default "";
 @AliasFor("value")
 String name() default "";
 boolean required() default true; 
 String defaultValue() default ValueConstants.DEFAULT_NONE;
}

這是示例代碼

@GetMapping("/findById")
  public ResultBean byid(@RequestParam(defaultValue = "1",required = false,/*value = "ss",*/name = "ls") Integer id){
    List<Customers> all = customersService.findById(id);
    return ResultBean.ok(all);
  }

二、說明

2.1 @RequestParam,對于參數(shù)入?yún)?,這個注解可以不必須有,但只能匹配和你定義的入?yún)?,完全一樣的名稱,對應(yīng)則匹配,不對應(yīng)就不匹配。

2.2 required ,是否必須,默認(rèn)為 true,也就是說,當(dāng)@RequestParam存在時,是默認(rèn)required = true條件的,@RequestParam不存在時,返回 2.1 的解釋。

2.3 defaultValue ,設(shè)置初始值,一般和required = false一起使用,如果不傳值,則使用默認(rèn)值。

2.4 value ,和name,一樣,給變量起別名,一一對應(yīng)于前端傳的屬性名,映射到后端接口變量名,有時前端無法按要求傳給你你所希望的變量名,這個就發(fā)揮用處了。

2.5 name ,和value一樣,給變量起別名,兩個同時存在時,訪問時就會出錯。

補充:springMVC的@RequestParam是必須滴

先看下代碼:

@RequestMapping(value = "/campaigns/{pageNo}/{pageSize}", method = RequestMethod.GET)
public String getList(@PathVariable("pageNo") int pageNo, 
  @PathVariable("pageSize") int pageSize,
  @RequestParam(defaultValue = "0") int status,
  @RequestParam(required=false) String keyword) {
    //....
    return null;
}

1.@RequestParam

在上面代碼中,一般情況下@RequestParam不加,方法參數(shù)也一樣能獲取對應(yīng)綁定的數(shù)據(jù),所以很多人都認(rèn)為@RequestParam是可加可不加的。

直到后來才了解到,Java的反射機制生成的對象并不會保存包含方法的參數(shù),即參數(shù)名不會保留在class文件中,所以spring不能反射綁定。

那么問題來了,為什么我們平時都能綁定呢?

這是因為,在Debug模式開啟情況下,就能綁定,而我們一般用的eclipse都是默認(rèn)開啟的。

Debug模式下之所以能夠綁定,是因為在project–>Properties–>Java Compiler里選中了Add variable attributes to generated class files(used by the debugger)。

要知道,開啟Debug模式會影響性能的,所以正式上線的時候,都會關(guān)掉的,如果我們沒加的話就會報以下錯誤:

Request processing failed;nested exception is java.lang.IllegalArgumentException:Name for argument type ….

2.@PathVariable

@PathVariable是用來指定獲取@RequestMapping里URL中占位符參數(shù)的字段,如上面的@PathVariable(“pageNo”) int pageNo中的pageNo字段就是為了獲取{pageNo}這個占位符的值。

@PathVariable括號里的名字必須與占位符的名字一致,而字段名可以不用一樣。

如果括號里不指定名字,則在非debug模式下也會遇到1的問題

所以,@PathVariable括號里的名字是必須的。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

最新評論

内黄县| 花莲市| 高台县| 沁水县| 宁国市| 宜丰县| 洪泽县| 松原市| 榆社县| 甘肃省| 离岛区| 沅陵县| 横峰县| 手游| 香格里拉县| 亚东县| 三江| 平乐县| 邛崃市| 鸡东县| 定边县| 龙游县| 潼关县| 靖边县| 亳州市| 五家渠市| 怀集县| 古丈县| 尚义县| 高要市| 南涧| 旌德县| 宜宾市| 陵川县| 阳朔县| 定边县| 鸡泽县| 巢湖市| 夏津县| 汕头市| 澄江县|