SpringMVC--请求传参总结
Posted Z && Y
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC--请求传参总结相关的知识,希望对你有一定的参考价值。
1. SpringMVC--请求传参总结
1.1 @RequestParam
类似于这样的传参方式 ?参数1=value1&参数2=value2
http://localhost:8081/postInfo?password=123456&userName=root
在控制器的处理方法入参处使用 @RequestParam可以把请求参数传递给请求方法。
1.1.1 源码分析
@RequestParam 注解源码
@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;
}
@RequestParam注解可以接受的参数:
- name —— 参数名(可以用这个属性取别名,默认值为参数名)。
- value —— 参数名(可以用这个属性取别名,默认值为参数名)。
- required —— 是否必须。默认为 true, 表示请求参数中必须包含对应的参数,若不存在,将抛出异常。
- defaultValue —— 默认值,当没有传递参数时使用该值。
name 和 value属性的作用是一样的
1.1.2 实例
请求一(不包含默认值):
@GetMapping("/postInfo")
public String hello(@RequestParam(value = "userName") String userName, @RequestParam(value = "password") String password) {
return "hello: " + userName + " and password is : " + password;
}
运行结果:
请求二(请求包含默认值):
@GetMapping("/postInfo")
public String hello(@RequestParam(value = "userName", defaultValue = "root") String userName, @RequestParam(value = "password") String password) {
return "hello: " + userName + " and password is : " + password;
}
运行结果:
小结:
加了默认值后,当前参数的required 默认为 false,即使设置为required = true,也不会生效
请求三(设置required = false):
@GetMapping("/postInfo")
public String hello(@RequestParam(value = "userName", defaultValue = "root") String userName, @RequestParam(value = "password", required = false) String password) {
return "hello: " + userName + " and password is : " + password;
}
运行结果:
请求四(value属性取别名):
@GetMapping("/postInfo")
public String hello(@RequestParam(value = "name") String userName, @RequestParam(value = "pwd") String password) {
return "hello: " + userName + " and password is : " + password;
}
运行结果:
请求五(name属性取别名):
@GetMapping("/postInfo")
public String hello(@RequestParam(name = "name") String userName, @RequestParam(name = "pwd") String password) {
return "hello: " + userName + " and password is : " + password;
}
运行结果:
请求六(什么都不加,默认为参数名):
@GetMapping("/postInfo")
public String hello(@RequestParam String userName, @RequestParam String password) {
return "hello: " + userName + " and password is : " + password;
}
运行结果:
1.2 @PathVariable
RestFul风格
@PathVariable 常用于 RestFul风格
类似于这样的传参方式 /value1/value2
http://localhost:8081/postInfo/root/123456
1.2.1 @PathVariable 源码
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface PathVariable {
@AliasFor("name")
String value() default "";
@AliasFor("value")
String name() default "";
boolean required() default true;
}
- name —— 参数名(可以用这个属性取别名,默认值为参数名)。
- value —— 参数名(可以用这个属性取别名,默认值为参数名)。
- required —— 是否必须。默认为 true, 表示请求参数中必须包含对应的参数,若不存在,将抛出异常。
name 和 value属性的作用是一样的
1.2.2 实例(由于跟@RequestParam类似,这里就简单写了)
请求:
@GetMapping("/postInfo/{name}/{pwd}")
public String hello(@PathVariable(value = "name") String userName, @PathVariable(value = "pwd") String password) {
return "hello: " + userName + " and password is : " + password;
}
运行结果:
以上是关于SpringMVC--请求传参总结的主要内容,如果未能解决你的问题,请参考以下文章