初学springboot,想不明白@RequestParam和@RequestBody

不能留白 2019-09-16 12:00:13
加精
再用ajax传值到后台的时候,发现两个好像都可以,因为@RequestBody接收的是json,所以前端要封装成json,而@RequestParam却不用,少了封装的这一步。而且@RequestParam使用范围好像更广一些,但是有些人说现在前端往后端传值基本都是json,所以应该使用@RequestBody??
那到底这两个是哪一个比较好用???还是按场合区分??按场合又是什么时候用@RequestBody,什么时候用@RequestParam??
下面是我用@RequestParam传数组到Controller的代码:
如果用@RequestBody,前端就好像多一个封装json的步骤,不是更麻烦一点???

saveId:["1","2","3"]//这是数组,要传到后端
var _this=this;
if(this.saveId.length>0){
$.post("all_delete",{"deid":_this.saveId},function(data){
if(data=="success"){
alert("删除成功!");
_this.ttPage();//重新获取数据的ajax
}
})
}


@RequestMapping("/all_delete")
@ResponseBody
public String all_delete(@RequestParam(value="deid[]")String[] a) {
userserviceimpl.deleteId(a);
return "success";
}
...全文
10456 55 打赏 收藏 转发到动态 举报
写回复
用AI写文章
55 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 8 楼 不能留白 的回复:
脑壳有点疼,学习vue的时候,官方推荐使用axios,axios传参的时候会自动封装成json传到后端,如果需要传两个数组,是不是就很麻烦了??? 然而用jquery的ajax,不是自动封装成json,可以和@RequestParam搭配使用,而且@RequestParam可以使用多个可以简单的解决上面的问题,但是jquery好像越来越被抛弃了。。。
{ "name":"网站", "num":3, "sites":[ "Google", "Runoob", "Taobao" ] } 还觉得麻烦吗
csdnheyuanbo 2020-04-29
  • 打赏
  • 举报
回复
引用 3 楼 oh_Maxy的回复:
如果不加@RequestBody,会把你return的内容当做一个页面去跳转,然后报错404
应该的responsebody吧。
weixin_43906899 2020-02-21
  • 打赏
  • 举报
回复
引用 3 楼 <span style="color:#4788C7">oh_Maxy</span>的回复:
如果不加@RequestBody,会把你return的内容当做一个页面去跳转,然后报错404
<br />那是responsebody吧
qnimal 2020-02-13
  • 打赏
  • 举报
回复
引用 58 楼 qmy960502 的回复:
看你参数的格式,你发请求报文时候,如果参数是跟url后面(/controller/method?id=1&username=admin)或者这样的urlencoded格式放报文正文里,那么用@requestparam用处就是参数是idxxx,你controller参数是id,为了对应上用。如果名字相同,不用注解就能传。而@request body是将报文正文中application/json或xml格式的数据解析到你注解的参数上用的。
不用考虑前端做什么操作步骤,你就知道他发什么数据,要什么返回就行。绑参注解是应对不同数据格式和数据位置,将参数绑定至接口方法用的。不过你用ajax发的话,一般就是json字符串吧,这种情况就@RequestBody就行
qnimal 2020-02-13
  • 打赏
  • 举报
回复
看你参数的格式,你发请求报文时候,如果参数是跟url后面(/controller/method?id=1&username=admin)或者这样的urlencoded格式放报文正文里,那么用@requestparam用处就是参数是idxxx,你controller参数是id,为了对应上用。如果名字相同,不用注解就能传。而@request body是将报文正文中application/json或xml格式的数据解析到你注解的参数上用的。
Lonnglong 2020-01-10
  • 打赏
  • 举报
回复
可能我才疏学浅,视图就是SQL只是封装了一下,对效率没有半点提高
编程写手 2019-10-29
  • 打赏
  • 举报
回复
看我的 vue访问spring boot篇的ajax中的问题,其中就会有@RequestParam和@RequestBody;两者不能同时存在,否则有一个就会被吃点,而且请求的方式不同使用的注解就不同,vue的ajax不是很好
码农快乐盒 2019-10-28
  • 打赏
  • 举报
回复
用@requestParam配置获取参数内容信息 @RequestBody是获取的是对象实例时候用的。
码农快乐盒 2019-10-28
  • 打赏
  • 举报
回复
引用 3 楼 oh_Maxy 的回复:
如果不加@RequestBody,会把你return的内容当做一个页面去跳转,然后报错404
你说的那个是ResponseBody
星宇大前端 2019-09-28
  • 打赏
  • 举报
回复
区别就是参数encode不同,一个是urlencode一个是jsonencode。对于我们前端来说
Promomo 2019-09-27
  • 打赏
  • 举报
回复
有点意思,学习看看!
daxieY 2019-09-27
  • 打赏
  • 举报
回复
@RequestBody是注解在方法上,这要你能够直接获取到json传来的参数,而@RequestParam是注解在方法获取的参数前,相当于一个标注,它能够获取页面上相应的参数
落丶枫 2019-09-20
  • 打赏
  • 举报
回复
@RequestBody接收json串,前端vue可以用data将参数封装成json对象,把对象传入后端的entity实体,entity实体类成员变量与前端json对象属性一一对应进行参数绑定 @RequestParam接收key-value数据,前端vue可以用params传参,这个注解还可以在参数绑定时给参数重命名 这两者在controller中不能同时使用,具体用哪一个就看你需要传json对象还是只需要穿普通的key-value数据
编程写手 2019-09-20
  • 打赏
  • 举报
回复
@RequestParam用于匹配get请求的参数,@RequestBody用于匹配请求体中的参数,详细看我的vue的文章
plutoppppp 2019-09-19
  • 打赏
  • 举报
回复
http中的数据结构不同,用postman会比较清晰,requestparam主要是用来接受x-www-unencode-url或者form-data这种,也可以是query-param,主要表现形式是key-map;而requestbody则是application/json这种,主要表现形式是字符串。 key-map: "key1":"value1"; "key2":"value2"; string(json举例): {"key1":"value1","key2":"value2"} 并且spring解析的受协议指定影响,如果用jquery进行请求时对data字段用了JSON.stringify进行转意,默认用的x-www-unencode-url,接收的时候param或body都能接受到,但后面还会跟上一个奇怪的=字符
  • 打赏
  • 举报
回复
引用 3 楼 oh_Maxy 的回复:
如果不加@RequestBody,会把你return的内容当做一个页面去跳转,然后报错404
你在这说啥呢,就算是也是responsebody
不能留白 2019-09-19
  • 打赏
  • 举报
回复
引用 40 楼 小葫芦-爬坑记 的回复:
@requestParamm 一般是用于get请求接收参数,@requestBody用于POST请求接受参数,他们都是用于接收json参数 看下我的这篇文章你就明白了https://blog.csdn.net/HXNLYW/article/details/89518579?utm_source=app
你说这句话是认真的??
葫芦胡 2019-09-19
  • 打赏
  • 举报
回复
@requestParamm 一般是用于get请求接收参数,@requestBody用于POST请求接受参数,他们都是用于接收json参数 看下我的这篇文章你就明白了https://blog.csdn.net/HXNLYW/article/details/89518579?utm_source=app
Kevin.Y.K 2019-09-18
  • 打赏
  • 举报
回复
。。。上周刚好看到你关于传参数组的提问,今天我说代码怎么那么熟悉,哈哈,说明上次我的留言你没看。 后台提供的接口要具有一定的通用性,给H5、APP或者其他服务端调用的,所以你的参数名和参数格式要规范和通用一点,不要产生歧义,现在一般都是post+json,一般用@RequestBody。 @RequestParam这个一般是将参数放在url上请求的,虽然简单,但是不能处理复杂的数据格式。
勇敢牛牛_ 2019-09-18
  • 打赏
  • 举报
回复
引用 29 楼 wxgxgp 的回复:
是都可以post,requestparam 可以从url和body取参 ,但是并不能解析复杂jsond对象,requestbody只能从body取值,所以说一个常用于get 一个常用于post
手误,requestparam只能能从url取参
加载更多回复(35)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧