@RequestParam注解加与不加的区别

1.不加@RequestParam注解

  1. 可以接收单个参数,
  2. 可以把接收的参数转换为对象,
  3. 可以接收同样的参数多个(?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注解

  1. 接收参数的变量名可以和传入的名字不一样
  2. 可以接收多个参数
  3. 可以设置默认值
  4. 如果不加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模板里面来填充
  1. @PathVariable
    这个注解能够识别URL里面的一个模板,我们看下面的一个URL
    http://localhost:8080/springmvc/hello/101?param1=10&param2=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,则必须传入参数
	.......
}
  1. @PathParam
    这个注解是和spring的pathVariable是一样的,也是基于模板的,但是这个是jboss包下面的一个实现,上面的是spring的一个实现,都要导包

在这里插入图片描述

4.关于@RequestBody注解的一些问题

  1. 单个字符串等包装类型都要写⼀个对象才可以⽤@RequestBody接收;
  2. 多个对象需要封装到⼀个对象⾥才可以⽤@RequestBody接收。
  3. 如果是一个参数时也需要用个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();
    }

参考:https://www.jb51.net/article/226657.htm

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值