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不加,方法参数也一样能获取对应绑定的数据,所以很多人都认为@RequestParam是可加可不加的。直到后来才了解到,Java的反射机制生成的对象并不会保存包含方法的参数,即参数名不会保留在class文件中,所以spring不能反射绑定。

那么问题来了,为什么我们平时都能绑定呢?

这是因为,在Debug模式开启情况下,就能绑定,而我们一般用的eclipse都是默认开启的。Debug模式下之所以能够绑定,是因为在project–>Properties–>Java Compiler里选中了Add variable attributes to generated class files(used by the debugger)。要知道,开启Debug模式会影响性能的,所以正式上线的时候,都会关掉的,如果我们没加的话就会报以下错误:

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

2.@PathVariable

@PathVariable是用来指定获取@RequestMapping里URL中占位符参数的字段,如上面的@PathVariable(“pageNo”) int pageNo中的pageNo字段就是为了获取{pageNo}这个占位符的值。@PathVariable括号里的名字必须与占位符的名字一致,而字段名可以不用一样。如果括号里不指定名字,则在非debug模式下也会遇到1的问题

所以,@PathVariable括号里的名字是必须的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值