请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于加不加@RequestBody?

老师,早上好!
请教一个问题?

@PostMapping("/save")
public CommonResp<Object> save(@Valid @RequestBody TrainCarriageSaveReq req) {
    ...
}

@GetMapping("/query-list")
public CommonResp<PageResp<TrainCarriageQueryResp>> queryList(@Valid TrainCarriageQueryReq req) {
    ...
}

本节中,为什么一个加了 @RequestBody 而一个没有加?
我上网搜索,搜到的答案都是同一篇,同时,他说的刚才与老师你写的相反。文中的解释是这样的。

为什么有的需要加@requestBody,有的不需要。加与不加的区别如下:
使用@requestBody.当请求content_type为:application/json类型的请求,数据类型为json时, json格式如下:{“aaa”:“111”,“bbb”:“222”}
不使用@requestBody.当请求content_type为:application/x-www-form-urlencoded类型的或multipart/form-data时,数据格式为aaa=111&bbb=222。
1 默认的ContentType的值为:application/x-www-form-urlencoded; charset=UTF-8
此格式为表单提交格式,数据为key1=value1&key2=value2的格式 。

根据上面文中的说法,默认的ContentType的值为:application/x-www-form-urlencoded; charset=UTF-8
此格式为表单提交格式,数据为key1=value1&key2=value2的格式,此时不使用@requestBody。
而老师你上面写的却是要加@RequestBody 的?

是不是网上的这种说法是错误的?post数据不都是以{“aaa”:“111”,“bbb”:“222”}这种格式的吗?怎么可能会是key1=value1&key2=value2的格式?上网搜索不但没找到答案,反而越看越迷糊了?

谢谢老师解答!!!

正在回答

1回答

你发的两个请求,一个post,一个是get,get请求是没有requestbody的,post有多种方式,一种是form表单方式,就是key1=value1&key2=value2,另一种是json方式,就是{“aaa”:“111”,“bbb”:“222”}方式

0 回复 有任何疑惑可以回复我~
  • 提问者 慕神4535282 #1
    老师,我这样理解对吗?key1=value1&key2=value2 对应的Content-Type 为 application/x-www-form-urlencoded,对应在后端使用的注解是@RequestParam(), 同时,在参数名需要和自定义的接收的参数保持一致时,@RequestParam()可以省略。
    回复 有任何疑惑可以回复我~ 2023-05-11 10:17:36
  • 甲蛙 回复 提问者 慕神4535282 #2
    对的。
    回复 有任何疑惑可以回复我~ 2023-05-11 22:05:17
  • 提问者 慕神4535282 #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2023-05-12 09:15:16
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信