- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章浅谈@RequestParam 参数是否必须传的问题由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1
2
3
4
5
6
7
8
9
10
11
|
@Target
(ElementType.PARAMETER)
@Retention
(RetentionPolicy.RUNTIME)
@Documented
public
@interface
RequestParam {
@AliasFor
(
"name"
)
String value()
default
""
;
@AliasFor
(
"value"
)
String name()
default
""
;
boolean
required()
default
true
;
String defaultValue()
default
ValueConstants.DEFAULT_NONE;
}
|
这是示例代码 。
1
2
3
4
5
|
@GetMapping
(
"/findById"
)
public
ResultBean byid(
@RequestParam
(defaultValue =
"1"
,required =
false
,
/*value = "ss",*/
name =
"ls"
) Integer id){
List<Customers> all = customersService.findById(id);
return
ResultBean.ok(all);
}
|
2.1 @RequestParam,对于参数入参,这个注解可以不必须有,但只能匹配和你定义的入参,完全一样的名称,对应则匹配,不对应就不匹配.
2.2 required ,是否必须,默认为 true,也就是说,当@RequestParam存在时,是默认required = true条件的,@RequestParam不存在时,返回 2.1 的解释.
2.3 defaultValue ,设置初始值,一般和required = false一起使用,如果不传值,则使用默认值.
2.4 value ,和name,一样,给变量起别名,一一对应于前端传的属性名,映射到后端接口变量名,有时前端无法按要求传给你你所希望的变量名,这个就发挥用处了.
2.5 name ,和value一样,给变量起别名,两个同时存在时,访问时就会出错.
补充:springMVC的@RequestParam是必须滴 。
先看下代码:
1
2
3
4
5
6
7
8
|
@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
;
}
|
在上面代码中,一般情况下@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 …. 。
@PathVariable是用来指定获取@RequestMapping里URL中占位符参数的字段,如上面的@PathVariable(“pageNo”) int pageNo中的pageNo字段就是为了获取{pageNo}这个占位符的值.
@PathVariable括号里的名字必须与占位符的名字一致,而字段名可以不用一样.
如果括号里不指定名字,则在非debug模式下也会遇到1的问题 。
所以,@PathVariable括号里的名字是必须的.
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我。如有错误或未考虑完全的地方,望不吝赐教.
原文链接:https://blog.csdn.net/qq_42105629/article/details/97298720 。
最后此篇关于浅谈@RequestParam 参数是否必须传的问题的文章就讲到这里了,如果你想了解更多关于浅谈@RequestParam 参数是否必须传的问题的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!