Java@RequestParam注解和@RequestBody注解接收参数

目录

Java后端接收数据

注意:后端接收参数大概四种情况:
①不写任何注解
②写@RequestParam注解,多个@RequestParam注解
③写@RequestBody
④写@RequestParam注解同时又写@RequestBody

第一章、后端不写任何注解情况下接收参数

1.1)后端不写注解postman发出get请求

①后端参数类型为Integer,发送参数String "1",结论接收成功

②后端参数类型为String,发送参数为String "1",结论接收成功

③后端参数类型为一个Integer,一个String。发送参数方式为form-data 为key(pid) value(1),key(eid) value("1"),结论接收成功

④后端参数类型为一个Integer,一个String,发送参数方式为JSON{"eid":"1","pid":1} ,结论接受到的俩个值为NULL值

postman页面

⑤后端参数类型为一个数组,接收多个同名参数,结论接收成功

postman页面

⑥后端参数类型为map,接收多个不同名参数,结论失败

postmanye页面

⑦后端参数类型为一个实体类,发送参数方式为JSON{"eid":"1","pid":1} ,结论对象参数的属性值为null

postman页面

1.2)后端不写注解postman发出post请求

①后端参数类型为Integer,发送参数为String "1",结论接收成功

②后端参数类型为String,发送参数为String "1",结论接收成功

③后端参数类型为一个Integer,一个String。发送参数方式为form-data 为key(pid) value(1),key(eid) value("1"),结论接收成功

④后端参数类型为一个Integer,一个String,发送参数方式为JSON{"eid":"1","pid":1} ,结论失败,两个值为NULL值

⑤后端参数类型为一个数组,接收多个同名参数,结论接收成功

⑥后端参数类型为map,接收多个不同名参数,结论失败

⑦后端参数类型为一个实体类,发送参数方式为JSON{"eid":"1","pid":1} ,结论失败,对象参数的属性值为null

第二章、后端写@RequestParam注解接收参数

2.1)postman发出post请求

①后端参数类型为Integer,发送参数为String "1",结论接收成功

②后端参数类型为String,发送参数为String "1",结论接收成功

③后端参数类型为一个Integer,一个String。发送参数方式为form-data 为key(pid) value(1),key(eid) value("1"),结论接收成功

④后端参数类型为一个Integer,一个String,发送参数方式为JSON{"eid":"1","pid":1} ,结论失败bad request

⑤后端参数类型为一个数组,接收多个同名参数,结论接收成功

注意:不同名的不会存入

请求:

如果传递的三个参数有两个与数组参数同名会存入数组,不同名的则不会被存入数组

传参:两个与数组参数同名,一个不同名

⑥使用Map去接收请求参数,接收成功

postman请求:

⑦后端参数类型为一个实体类,发送参数方式为JSON{"eid":"1","pid":1} ,结论失败,Bad Request

@RequestParam不能注解实体类参数

postman页面

2.2)postman发出get请求

①后端参数类型为Integer,发送参数为String "1",结论接收成功

②后端参数类型为String,发送参数为String "1",结论接收成功

③后端参数类型为一个Integer,一个String。发送参数方式为form-data 为key(pid) value(1),key(eid) value("1"),结论接收成功

④后端参数类型为一个Integer,一个String,发送参数方式为JSON{"eid":"1","pid":1} ,结论失败bad request

⑤后端参数类型为一个数组,接收多个同名参数,结论接收成功

不同名的不会存入

⑥后端参数类型为map,接收多个不同名参数,结论成功

⑦后端参数类型为一个实体类,发送参数方式为JSON{"eid":"1","pid":1} ,结论失败,Bad Request

@RequestParam不能注解实体类参数

第三章、后端写@RequestBody注解接收参数

@RequestBody(只能接收JSON字符串)

3.1)postman发出post请求

①后端参数是Integer,传参数是数字 1 ,结论成功。

json的value为" " :后端对应属性是String类型的,那么接受到的就是" ",如果后端属性的类型是Integer、Double等,那么接收到的就是null。

json的value为null:后端对应收到的就是null。
②后端参数是String,传参数是字符串 1,结论成功
③后端参数是Integer,传参数是json {"eid":1},结论失败 bad request
④后端参数是一个简单对象,发送参数方式为JSON{"eid":"1","pid":1}

会根据json字符串中的key来匹配对应实体类的属性,如果匹配一致且key对应的值符合实体类对应属性的类型要求时,会调用实体类的setter方法将值赋给该属性。

postman页面

⑥@RequestBody与@RequestParam()同时使用:

Controller:

postman页面:

3.2)postman发出get请求

@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);而最常用的使用请求体传参的无疑是POST请求了,所以使用@RequestBody接收数据时,一般都用POST方式进行提交。

第四章、总结

@RequestParam总结

①@RequestParam用来绑定查询参数(也就是在URL上的参数)和from data(也就是请求体,对应postman中的 from-data)。发起请求时在URL上和使用from data传参都可以使用 @RequestParam来接收。

②@RequestParam将接收到的字符串自动转化为对应的类型

③@RequestParam不支持直接传递实体类的方式,可接收Map和数组,可接收单个参数。

④@RequestParam注解的属性

1、如果参数前写了@RequestParam(xxx),那么前端发送的请求路径中必须有对应的xxx参数才行

2、value:请求中传入参数的名称,如果不设置后台接口的value值,则会默认为该变量名。

3、name:作用同value相同

4、required:表示请求中一定要传入对应的参数,如果设置为false时,当请求中没有此参数,将会默认为null

5、defaultValue:参数的默认值,如果请求中没有同名的参数时,该变量默认为此值。注意默认值可以使用SpEL表达式,如"#{systemProperties['java.vm.version']}"

java 复制代码
@RequestParam(value = "参数名",required = false,defaultValue = "12")

@RequestBody总结

①@RequestBody主要使用post请求,接收JSON类型数据

②一个请求中@RequestBody最多只能有一个,而@RequestParam()可以有多个。它们可以同时使用。

③@RequestParam指定接收的参数可以是普通元素、数组、集合、对象等等,@RequestBody接收的是请求体里面的数据

④如果参数是放在请求体中,以application/json的格式传入后台接口,那么后台要@RequestBody才能接收到;如果不是放在请求体中的话要用@RequestParam来接收,或者在形参前不贴@RequestParam注解也能接收。

⑤feign或者openfeign远程调用服务时,如果参数前什么也不写,那么会被默认是@RequestBody。

相关推荐
逑之几秒前
C语言笔记13:数据在内存中的存储
c语言·开发语言·笔记
不会c嘎嘎2 分钟前
QT中的常用控件 (四)
开发语言·qt
bing.shao3 分钟前
AI在电商上架图片领域的应用
开发语言·人工智能·golang
步步为营DotNet4 分钟前
深度探索.NET 中ValueTask:优化异步性能的轻量级利器
java·spring·.net
栈与堆7 分钟前
LeetCode-88-合并两个有序数组
java·开发语言·数据结构·python·算法·leetcode·rust
彩妙不是菜喵9 分钟前
C++:类与对象
开发语言·c++
董世昌4110 分钟前
添加、删除、替换、插入元素的全方法指南
java·开发语言·前端
源代码•宸15 分钟前
Leetcode—712. 两个字符串的最小ASCII删除和【中等】
开发语言·后端·算法·leetcode·职场和发展·golang·dp
小当家.10516 分钟前
JVM八股详解(上部):核心原理与内存管理
java·jvm·学习·面试
heartbeat..16 分钟前
Spring 声明式事务:原理、使用及失效场景详解
java·spring·面试·事务