Spring MVC 学习手记(4)- @RequestParam 注解

@RequestParam绑定请求参数

Spring MVC 可以通过分析处理方法的签名,将HTTP请求信息(如请求参数)绑定到处理方法的入参中。Spring MVC对于Controller的处理方法签名的限制是很宽松的。

开发者可以对处理方法、方法入参 标注响应的注解(如:@PathVariable、@RequestParam、@RequestHeader etc),Spring MVC 会将HTTP请求信息绑定到相应的方法入参中,并根据方法的返回值做后续处理。

使用@RequestParam绑定请求参数值
使用@RequestParam注解,可以将指定的 请求参数的值 传递给指定的 方法参数。

该注解有四个属性:

  • name : 指定要绑定的请求参数的名称
  • value : 作用与name属性相同
  • required :表示name属性中设置的请求参数是否必须存在。默认为true
  • defaultValue :当name指定的请求参数未提供或具有空值(null)时,该请求参数的默认值。

简单的代码示例:

@Controller
@RequestMapping(value = "/springmvc")
public class HelloController {

    private static final String SUCCESS = "success";

    @RequestMapping(value = "/test")
    public String testRequestParam(@RequestParam(name = "username",required = true,defaultValue = "monkey") String name , @RequestParam(value = "age",required = false) Integer age)
    {
        System.out.println(name+"<-->"+age);
        return SUCCESS;
    }

用于测试的请求:

<a href="/springmvc/test?username=jack&age=22">testRequestParam</a>

测试结果:

jack<-->22

1)、当username请求参数不存在时:

<a href="/springmvc/test?age=22">testRequestParam</a>

报出:HTTP Status 400 - Required String parameter 'username' is not present

2)当username不提供值时:

<a href="/springmvc/test?username&age=22">testRequestParam</a>

输出:monkey<-->22

3)当age请求参数不存在、或不提供值 时

<a href="/springmvc/test?username">testRequestParam</a>
<a href="/springmvc/test?username=jack&age">testRequestParam</a>

输出 :monkey<-->null
      monkey<-->null

因为age请求参数设置了required = false,所以即使不存在age请求参数,也不会报错。

但此处有一点需注意:

testRequestParam(@RequestParam(name = "username",required = true,defaultValue = "monkey") String name , @RequestParam(value = "age",required = false) Integer age)

该方法的age参数建议为Integer,因为当age请求参数不存在、或不提供值 时,传递给age参数(testRequestParam方法的age参数,不是HTTP请求参数)的值为null,而int类型(基本数据类型)的值是不允许为null。会抛出java.lang.IllegalStateException

HTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalStateException: Optional int parameter 'age' is present but cannot be translated into a null value due to being declared as a primitive type. Consider declaring it as object wrapper for the corresponding primitive type.

假如根据业务需要(或者自己任性)testRequestParam方法的age参数必须为int类型时,可以通过@RequestParam注解的defaultValue = “0”属性,来避免上述异常。

@RequestHeader注解绑定请求头

使用@RequestHeader注解可以将请求头中的属性值绑定到处理方法的参数中。该注解与@RequestParam有相同的四个属性,用法也没什么不同。
例如:
public String handlerMethod(@RequestHeader(value = “Accept-Language”)String acceptLanguage)

console : zh-CN,zh;q=0.8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值