首页 > 技术文章 > @Param 和 @RequestParam 的关系

sensenh 2021-03-08 10:32 原文

@Param和@RequestParam是什么关系呢?其实它们没有关系,就跟Java和JavaScript,雷锋和雷锋塔一样,拥有相似的外表,其实作用是不一样的,@Param是地处Dao层,是为了传递多个参数,解决的是可读性和直观性;而@RequestParam是位列Controller层,作用是为获取前端参数,解决的是前后端参数不一致的问题。所以它们没有关系!

 

 

=======================================================================

(一) 转自:https://class.imooc.com/course/qadetail/251374

 

1、@RequestParam注解用于将请求参数绑定到Controller的方法参数上。

以下三种情况需要加@RequestParam注解:

a. 当请求参数的参数名与方法中参数名称不一致,导致绑定失败时,要加@RequestParam注解,并设置name或value属性值为请求参数的参数名。

b. 当请求参数必须传时,要加@RequestParam注解,其中required值默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。

c. 当要设置请求参数的默认值时,要加@RequestParam注解,通过设置defaultValue值。

2、使用List是为了接收表单中复选框提交的数据。复选框在提交的时候,会提交选中的每一项。

例如,表单中要提交的信息如下:

http://img.mukewang.com/climg/5f4c66500970503203020225.jpg

提交的数据如下:

http://img.mukewang.com/climg/5f4c666909eb5d3503250120.jpg

3、使用Map为了说明可以使用Map接收表单数据,表单中name值就是Map中的key。使用Map可以代替实体类Form。

 

 

 

=======================================================

(二)

语法:@RequestParam(value=”参数名”,required=”true/false”,defaultValue=””)

  • value:参数名
  • required:是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。
  • defaultValue:默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值

 

=======================================================

 

(三) 转自:http://t.zoukankan.com/zlw-xf-p-9464929.html

@RequestParam注解的作用及用法

最简单的两种写法,在写接口时:加或不加@RequestParam注解的区别

第一种写法参数为非必传,第二种写法参数为必传。参数名为userId

第二种写法可以通过@RequestParam(required = false)设置为非必传。因为required值默认是true,所以默认必传

第二种写法可以通过@RequestParam("userId")或者@RequestParam(value = "userId")指定参数名

第二种写法可以通过@RequestParam(defaultValue = "0")指定参数默认值

用法如下:

====================================================================

 

(四) 转自:https://www.jianshu.com/p/06667e4580a8

1、可以对传入参数指定参数名


**错误信息:** **HTTP Status 400 - Required String parameter 'aa' is not present**

2、可以通过required=false或者true来要求@RequestParam配置的前端参数是否一定要传

// required=false表示不传的话,会给参数赋值为null,required=true就是必须要有  
@RequestMapping("testRequestParam")    
public String filesUpload(
    @RequestParam(value="aa", required=true) String inputStr,
     HttpServletRequest request)  

 3、如果用@RequestMapping注解的参数是int基本类型,但是required=false,这时如果不传参数值会报错,因为不传值,会赋值为null给int,这个不可以

推荐阅读