山东网站建设seo,开源影视cms系统,dw做的个人网站,苏州大型网站建设公司一、前言 一直有这么一个疑问#xff1a;在使用postman工具测试api接口的时候#xff0c;如何使用 json 字符串传值呢#xff0c;而不是使用 x-www-form-urlencoded 类型#xff0c;毕竟通过 key-value 传值是有局限性的。假如我要测试批量插入数据的接口呢#xff0c;使用…一、前言 一直有这么一个疑问在使用postman工具测试api接口的时候如何使用 json 字符串传值呢而不是使用 x-www-form-urlencoded 类型毕竟通过 key-value 传值是有局限性的。假如我要测试批量插入数据的接口呢使用 x-www-form-urlencoded 方法根本就不适用于这种场景。
那么如何通过postman工具使用json字符串传值呢这里就引申出来了spring的两个注解
RequestParamRequestBody
总而言之这两个注解都可以在后台接收参数但是使用场景不一样。继续往下看 ↓
二、RequestParam 先介绍一下RequestParam的使用场景
注解RequestParam接收的参数是来自requestHeader中即请求头。通常用于GET请求比如常见的urlhttp://localhost:8081/spring-boot-study/novel/findByAuthorAndType?author唐家三少type已完结其在Controller 层的写法如下图所示 RequestParam有三个配置参数
required 表示是否必须默认为 true必须。 defaultValue 可设置请求参数的默认值。 value 为接收url的参数名相当于key值。 RequestParam用来处理 Content-Type 为 application/x-www-form-urlencoded 编码的内容Content-Type默认为该属性。
RequestParam也可用于其它类型的请求例如POST、DELETE等请求。比如向表中插入单条数据Controller 层的写法如下图所示 由于RequestParam是用来处理 Content-Type 为 application/x-www-form-urlencoded 编码的内容的所以在postman中要选择body的类型为 x-www-form-urlencoded这样在headers中就自动变为了 Content-Type : application/x-www-form-urlencoded 编码格式。如下图所示 但是这样不支持批量插入数据啊如果改用 json 字符串来传值的话类型设置为 application/json点击发送的话会报错后台接收不到值为 null。
这时候注解RequestBody就派上用场了。
三、RequestBody
先介绍一下RequestBody的使用场景
注解RequestBody接收的参数是来自requestBody中即请求体。一般用于处理非 Content-Type: application/x-www-form-urlencoded编码格式的数据比如application/json、application/xml等类型的数据。
就application/json类型的数据而言使用注解RequestBody可以将body里面所有的json数据传到后端后端再进行解析。
3.1 向表中批量插入数据 举个批量插入数据的例子Controller层的写法如下图所示 由于RequestBody可用来处理 Content-Type 为 application/json 编码的内容所以在postman中选择body的类型为row - JSON(application/json)这样在 Headers 中也会自动变为 Content-Type : application/json 编码格式。body内的数据如下图所示 批量向表中插入两条数据这里的 saveBatchNovel()方法已经封装了 JPA的 saveAll() 方法。body 里面的 json 语句的 key 值要与后端实体类的属性一一对应。
注意前端使用$.ajax的话一定要指定 contentType: “application/json;charsetutf-8;”默认为 application/x-www-form-urlencoded。
3.2 后端解析json数据 上述示例是传递到实体类中的具体写法那么如果传递到非实体类中body里面的json数据需要怎么解析呢我们再来看下面这个例子
在body中我们还是输入上面的json数据根据分析上面的json数据是一个List数组内嵌套着map对象那么在后台的接收形式可写为 ListMapString, String具体代码如下图所示 控制台输出 四、总结 注解RequestParam接收的参数是来自requestHeader中即请求头。通常用于GET请求像POST、DELETE等其它类型的请求也可以使用。
注解RequestBody接收的参数是来自requestBody中即请求体。一般用于处理非 Content-Type: application/x-www-form-urlencoded编码格式的数据比如application/json、application/xml等类型的数据。通常用于接收POST、DELETE等类型的请求数据GET类型也可以适用。
**重点补充**在使用注解RequestParam的时候【不加注解的时候效果与RequestParam类似】在body data中我们不能传json字符串类型的参数否则对象中是接收不到传递参数相应的值。相应的在RequestBody注解标记的形式上传递表格参数则会报错。
postman模拟发送请求【RequestParam接受json字符串】
debug断点后页面展示的结果 postman模拟发送请求【RequestBody接受application/x-www-form-urlencoded表格参数】 代码以及报错显示