SpringMVC接收请求参数

6 篇文章 2 订阅
4 篇文章 0 订阅
@RequestParam
在SpringMVC中,RequestParam注解接收的参数是来自于requestHeader中,即请求头,也就是在url中。格式为xxx?username=123&password=456

在这里插入图片描述
在这里插入图片描述

@RequestBody

而@RequestBody注解接收的参数则是来自于requestBody中,即请求体中。
如果为post请求时,后台接收参数时注意区分:

1、请求中content-type为application/json,参数提交形式为Request Payload时,需要使用注解@RequestBody

在这里插入图片描述
在这里插入图片描述

2、请求中content-type为application/x-www-form-urlencoded,参数提交形式为Form Data时,无需使用注解,可以直接拿实体类接收参数

在这里插入图片描述
在这里插入图片描述

几种方式的请求入参对应后端接口的参数接收:

在这里插入图片描述


补充一:application/x-www-form-urlencoded和application/json的区别
application/x-www-form-urlencoded

在html的form元素的语法中,EncType表明提交数据的格式用Enctype属性,指定将数据发到服务器时浏览器使用的编码类型。下边是说明:

1、application/x-www-form-urlencoded:表单数据被编码为名称/值对,这是标准的编码格式,也是默认的
2、multipart/form-data:表单数据被编码为一条消息,页上的每个控件对应消息中的一个部分
3、text/plain:表单数据以纯文本形式进行编码,其中不含任何控件或格式字符

当请求方式为GET时,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1&name2=value2…),然后把这个字串append到url后面,用?分割,加载成这个新的url。

当请求方式为POST时,浏览器把form数据封装到HTTP body中,然后发送到服务端。如果没有type=file的控件,用默认的application/x-www-form-urlencoded就可以了。但是如果有type=file的话,就要用到multipart/form-data了。浏览器会把整个表单以控件为单位分割,并为每个部分加上Content-Disposition(form-data或者file),Content-Type(默认为text/plain),name(控件name)等信息,并加上分割符(boundary)。

application/json

有的时候前端发送的请求中 content-type为application/json,这样也能在后台接受前台提交的数据。其实这个时候前端提交的数据是 json格式的字符串,后端要用@RequestBody注解来接收。


补充二:@RequestBody

RequestBody注解接收的参数是一个String化的JSON,前端JS可以直接使用JSON.stringify(jsonObject)这个方法来转换JS中的JSON对象为JSON字符串。

该注解用于Controller的方法参数,根据htttp请求的Request Headers中的Content-Type的内容,通过适当的HttpMessageConverter转换为java实体。所以后台无需手动进行JSON与实体的转换。只要能映射上去(字段名和JSON的key相对应,value可以匹配上相应的数据类型)就可以直接转换,所以可以直接使用java对象接收参数。

由上我们可以知道,后端使用@RequestBody注解接收参数时,我们需要手动设置前端请求头中的content-type为application/json,明确的告诉服务器发送的内容是JSON,如果不设置这个属性,请求就会采用默认的content-type(application/x-www-form-urlencoded;charset=UTF-8)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值