1.不加@RequestParam注解
- 可以接收单个参数,
- 可以把接收的参数转换为对象,
- 可以接收同样的参数多个(?age=10&age=20),使用数组来接收
//情况1
@GetMapping("/t1")
public String test01(String name){
//一个key对应一个value
System.out.println("接收的前端参数:"+name);
//name=jack
return null;
}
//情况2
@RequestMapping("/t2")
public String test02(User user){
//User对象中有id,name,age三个参数
System.out.println(user);
//User(id=1, name=jack, age=20)
return null;
}
//情况3
@RequestMapping("/get_post/get02")
@ResponseBody
public String get02(String[] username){ //这个使用数组的形式来接收
//get请求,一个key对应多个value
System.out.println(username.length);//2
return null;
}
发送请求://http://localhost:8080/1203/user/t2?id=1&name=jack&age=20
如果传入参数的名字和方法上的参数名字不匹配则接收不到数据
2. 加@RequestParam注解
- 接收参数的变量名可以和传入的名字不一样
- 可以接收多个参数
- 可以设置默认值
- 如果不加required属性,默认为 true,也就是说,当@RequestParam存在时,是默认required = true条件的,当接收参数不匹配时,会报错;设置为false时表示可以不传参
//情况1.
@GetMapping("/t1")
public String test01(@RequestParam("username")String name){
//一个key对应一个value
System.out.println("接收的前端参数:"+name);
//name=jack
return null;
}
//情况2 xxx?username=zhangsan&username=lisi
@GetMapping("/t1")
public String get03(@RequestParam(value = "username",required = false) List<String> username){ //使用list来接收
//get请求,一个key对应多个value
System.out.println(username);//[zhangsan, lisi]
return username.toString();
}
3. 其他的一些接收参数的注解:@PathVariable、@PathParam、@RequestParam
- @RequestParam 是从request里面拿取值;@PathVariable 和 @PathParam 是从一个URI模板里面来填充
- @PathVariable
这个注解能够识别URL里面的一个模板,我们看下面的一个URL
http://localhost:8080/springmvc/hello/101?param1=10¶m2=20
上面的一个url你可以这样写:
@RequestMapping("/hello/{id}")
public String getDetails(@PathVariable(value="id") String id,
@RequestParam(value="param1", required=true) String param1,
@RequestParam(value="param2", required=false) String param2){
//param1的@RequestParam注解中的required=true,则必须传入参数
.......
}
- @PathParam
这个注解是和spring的pathVariable是一样的,也是基于模板的,但是这个是jboss包下面的一个实现,上面的是spring的一个实现,都要导包
4.关于@RequestBody注解的一些问题
- 单个字符串等包装类型都要写⼀个对象才可以⽤@RequestBody接收;
- 多个对象需要封装到⼀个对象⾥才可以⽤@RequestBody接收。
- 如果是一个参数时也需要用个Map或者对象处理,使用String会报解析错误
如果要写多个@RequestBody需要重写方法
一个使用Map接收当参数的例子:
- 前端发送axios请求:
data() {
return{
aboutme: {
content:'',
}
}
},
methods: {
saveAboutMe(){
blogApi.saveAboutMe(this.aboutme)
.then(response=>{})
},
}
// axios 请求,封装了一层
saveAboutMe(aboutMe){
return request({
url: process.env.WEB_API + `/article/saveAboutMe`,
method: 'post',
data: aboutMe
})
}
- 后端接口:
@PostMapping("saveAboutMe")
public Result saveAboutMe(@RequestBody Map<String,String> aboutMe)
{
articleService.saveAboutMe(aboutMe.get("content"));
return Result.ok();
}