@RequestParam和@RequestBody用法区别

2022-09-15 11:16:42

注解理解:

@RequestParam

该注解含义是指从请求头中取的参数,即?后面拼接的参数。对于get,post请求,都可以在请求头中拼接参数, 故该注解可用于get请求或者post请求,修饰基本数据类型参数或者map类型参数, 不可用于修饰对象

@RequestBody

该注解含义是指从请求体重获取参数,而get请求是没有请求体的, 故该注解不可用于get请求,可用于post等请求. 但是请求头中的content-type的数据格式必须是json或者xml, 一般来说json常用

用法总结:

从注解角度:

@RequestBody:

使用 @RequestBody时: 请求方式为post, 请求头的content-type:application/json,
当参数为只有一个string时, 表示把json格式的字符串数据封装在参数中,即此时入参是一个json格式的字符串,需要自己手动json解析,详情见图片
在这里插入图片描述
当参数为一个对象时, 框架会帮我们把对应字段的数据封装在对象中, 注意:
1 如果某个字段没有传, 则对象中的值为该字段默认值,即基本数据类型和其对应包装类的区别, 所以对应的属性数据类型推荐使用包装类, 默认为null.
2 如果数据格式为{“id”:""}时,则对象中的属性如果是string时,其值为"", 其他数据类型为其默认值
3 如果数据格式为{“id”:null}时, 则对象中的属性为其默认值
4 数据格式中key和value要么同时传,要么同时不传
*强调文本* _强调文本_

@RequestParam:

请求方式为get时: 修饰的参数可以是map也可以是多个基本数据类型参数,但不可以是对象

**加粗文本** __加粗文本__

请求方式为post时: 因为post请求有请求体, 所以要分为请求体的数据格式来讨论

1 如果请求数据格式为form-data或者x-www-form-urlencoded: ?拼接的参数或者表单格式的参数都可以接收到

在这里插入图片描述

如果同时使用了?拼接和表单提交数据呢?下图为测试, 生产上是不会这么使用的, 注意下

发现结果就是: ?后的数据会被加上逗号,拼接上表单中的数据
在这里插入图片描述

2 如果请求数据格式为json: 发现?后面的参数可以拿到,但请求体中的数据是取不到的,因为json的数据格式只有使用@requestBody才可以取到啊,
  • 作者:一森丶jsone
  • 原文链接:https://blog.csdn.net/weixin_43004049/article/details/103255011
    更新时间:2022-09-15 11:16:42