@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括号里的名字是必须的。
以上为个人经验,希望能给大家一个参考,也希望大家多多。如有错误或未考虑完全的地方,望不吝赐教。
原文链接:https://blog.csdn.net/qq_42105629/article/details/97298720