IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> @RequestBody和@RequestParam的使用 -> 正文阅读

[Java知识库]@RequestBody和@RequestParam的使用

@RequestBody
@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。

@RequestBody接收的参数是来自requestBody中,即请求体。一般用于处理非 Content-Type: application/x-www-form-urlencoded编码格式的数据,比如:application/json、application/xml等类型的数据。

GET请求中,因为没有HttpEntity,所以@RequestBody并不适用。

POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,SpringMVC通过使用HandlerAdapter 配置来解析HttpEntity中的数据,然后绑定到相应的bean上。

如果前端向后端传递的是非实体类对象,后台也可以使用@RequestBody注解,那就用List<Map<String, String>>来接收

@RequestParam
用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。(Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型)

POST类型和GET类型都可以使用@RequestParam注解来接收参数

@RequestParam注解有三个参数

required 表示是否必须,默认为 true,必须。

defaultValue 可设置请求参数的默认值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值。

value 为接收url的参数名(相当于key值)。

举例:

//一下两种写法效果一模一样
@RequestParam("") 或 @RequestParam(value="")

//当配置多个属性的时候
@RequestParam(value="", required=true, defaultValue="")
    
//如果使用下面这种方式接值,那么前台穿过来的参数名称就要和inputStr一样,这里才能接收到
@RequestParam String inputStr
    
//但是如果加上value属性的话,那么前台传过来的参数名称就要和value属性中的一致才能接收到
@RequestParam(value="aa") String inputStr  
    
//如果加上required属性,当required=true就是必须要传参值过来, 当required=false表示不传的话,会给参数赋值为null
@RequestParam(value="aa", required=true)

//有一种特殊情况是参数为int类型时,设置required=false后参数不传值得话会给int类型参数赋值为null,而int是基本数据类型不能赋值为null,所以会报错,此时要将int类型改为Integer类型
@RequestParam(value="inputInt", required=false) int inputInt  

@RequestParam接收对象类型
这里举个栗子

实体类是People属性如下

private String name; //姓名
private int age; //年龄
private String sex;  //性别

前台代码(拿JSP举例)

<input type="text" value="黑黑" name="name">
<input type="text" value="18"  name="age">
<input type="text" value="男"  name="sex"> 

后台代码

int addPeople(@RequestParam People people) {}
//这时候使用@RequestParam注解修饰参数 只要前台传的参数名称和people类中的属性名一致就可以自动封装进People实体类

这里我又想到一个问题,加和不加@RequestParam参数有什么区别呢?
其实不加@RequestParam参数也没问题(此时的参数名称要和前台传过来的参数名称保持一致),也可以接收到前台传过来的参数,当前台没有传值时接收到的为null,只不过使用@RequestParam是为了用它里面的一些属性,比如默认值或required属性。

总结
Post请求接收@RequestBody修饰的参数和@RequestParam修饰的参数,而Get请求则只能接收@RequestParam修饰的参数。
如果前端传的是Json类型的对象,后台就要使用@RequestBody修饰的实体类接收,如果是单个属性就使用@RequestParam修饰的变量或实体类接收

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-09 18:09:53  更:2022-04-09 18:11:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:54:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码