Post请求和Spring MVC

考虑了好久,总是感觉自己的技术太差,写博客会误导别人,最终还是决定写写看了。如果有地方不足或是错误,请大牛不吝赐教。


首先介绍一下HTTP协议。

HTTP:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。HTTP是一个客户端和服务端端请求和应答的标准(TCP)。一个HTTP请求大体上可以划分三个部分: 请求行、请求头、请求体。请求行包括三部分内容,第一请求的方法(这点很重要,在你以后的开发中这无时无刻的在你身边),HTTP请求方法有很多,常见的主要有POST、GET、PUT、DELETE,今天主要讲的是POST请求。第二URL地址,第三HTTP协议版本。请求头:包含的内容比较多,简要的说几个,Content-Type(这个也是今天主要说的)用来指定不同格式的请求信息,Connection连接方式,主要是长连接keep-alive,还有很多内容,有兴趣的可以自己深入了解一下。请求体:主要是放我们要和服务端打交道的数据。


然后介绍三种常见的POST提交的提交数据

1、application/x-www-form-urlencoded
这是原生的Form表单请求格式, 浏览器会把Form表单的数据封装到HTTP请求的body中,然后发送到server。

2、multipart/form-data
这也是From表单常见的一种提交方式在表单中上传文件,一般会将form的enctype参数设置为multipart/form-data。这种方式只支持POST的请求方式。 Contype-Type=multipart/form-data情况的时候,都会通过一个特殊的字符串来将原始POST数据进行分割。

3、application/json
也是很常见的一种,在实际开发中和测试中使用比较平凡因为现在JSON太流行了现在。现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串。

Spring MVC中的数据绑定的注解。 @RequestParam,@RequestBody
1、@RequestParam

Use the @RequestParam annotation to bind request parameters to a method parameter inyour controller.Parameters using this annotation are required by default, but you can specify that aparameter is optional by setting @RequestParam's required attribute to false(e.g., @RequestParam(name="id", required=false)).这是官方解释。也就是说后台通过HTTP请求传过来的参数,可以通过@RequestParam绑定到后台参数。@RequestParam常用来绑定简单的数据


2、@RequestBody

The@RequestBody method parameter annotation indicates that a method parameter shouldbe bound to the value of the HTTP request body.


这是官方的解析。用该注解标识的方法的参数,会和web请求体绑定。http消息转换器会根据content-type的设置将请求体解析,从而初始化该方法的参数。

Contend-Type与Spring注解的关系
1、x-www-form-urlencoded与@RequestParam---------(请求成功)



2、application/json与@RequestParam---------(请求成功)




3、Application/json与@RequestBoby---------(请求成功)



4、x-www-form-urlencoded与@RequestBoby---------(请求失败)




总结:

POST方式提交的请求:

Content-type:

1、application/x-www-form-urlencoded:@RequestBody不是必须加的

2、mutipart/form-data:@RequestBody不能处理这种格式

3、其他格式,比如application/json,application/xml等,必须使用@RequestBody来处理


本文引用:https://www.cnblogs.com/anai/p/4272573.html

  http://blog.csdn.net/tycoon1988/article/details/40080691


努力了,才不会留下遗憾。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值