你可能已经发现有的项目中在Controller中使用了@RequestParam注解,又的并为使用,那么什么时候需要使用@RequestParam,什么时候可以省略呢?本文带你来了解一下其中的区别。

@RequestParam注解指定参数名

如果使用@RequestParam通常有两种形式:指定参数名和不指定参数名。
下面为不指定参数名,SpringMVC会默认使用parkId作为参数匹配的标准。

@GetMapping("/getById")
public String getById(@RequestParam String parkId) {
    log.info("parkId = {}", parkId);
    return parkId;
}

下面为指定参数名:

@GetMapping("/getById")
public String getById(@RequestParam(value = "parkId") String parkId) {
    log.info("parkId = {}", parkId);
    return parkId;
}

这样SpringMVC绑定时会将value中指定的参数名匹配方法中的参数,进行绑定。这种情况通常用于请求参数与方法定义参数不一致的情况。比如请求参数为id,而方法参数为parkId这种情况,示例如下:

@GetMapping("/getById")
public String getById(@RequestParam(value = "id") String parkId) {
    log.info("parkId = {}", parkId);
    return parkId;
}

此时如果请求时参数没有id参数,则会抛出异常:

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

@RequestParam注解指定是否必须

默认情况下明确使用@RequestParam注解表示该参数必须传值,否则会抛出上述异常。但如果该参数值可以为null时,则可以通过required=false来指定:

@GetMapping("/getById")
public String getById(@RequestParam(required = false) String parkId) {
    log.info("parkId = {}", parkId);
    return parkId;
}

因为默认就是true,true值时可以不用指定。

如果参数是int基本类型且required=false,这时如果不传参数值会报错,因为不传值,会赋值为null给int。解决方法就是:“Consider declaring it as object wrapper for the corresponding primitive type.”建议使用包装类型代替基本类型,如使用“Integer”代替“int”。

@RequestParam属性详解

@RequestParam有三个属性:

(1)value:请求参数名,非必需。如果请求参数与方法参数不一致,则必须配置。

(2)required:非必需,默认为 true,即请求中必须包含该参数,如果没有包含,将会抛出异常。

(3)defaultValue:设置参数默认值,如果设置了默认值,无论是否配置了required,required将自动设为false(可选配置)。

@RequestParam什么时候可以省略

在了解了上面的基础知识之后,再来看看什么时候@RequestParam注解可以省略。

条件一:请求参数名和方法参数变量一致。比如请求参数为”name=Tom”,那么对应方法中参数的定义为“String name”。

条件二:该参数为非必须的,也相当于required=false。也就是说如果没有使用@RequestParam,Spring MVC可以帮忙绑定参数,但并不要求参数必须有值,为null也是可以的。



@RequestParam什么时候可以省略?插图

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:http://choupangxia.com/2020/12/23/requestparam/