常用HTTP contentType与后端处理方式
1、Content-Type:application/x-www-form-urlencoded; charset=UTF-8
![](https://i-blog.csdnimg.cn/blog_migrate/7fd94389bd12ef45036c0b232c9c7c52.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/c0a2a3beda0b08bdf65dc543fa118d0d.webp?x-image-process=image/format,png)
对应的后端的处理方式,如果是单个参数去获取,那就用@RequestParam,如果是对应Java Bean,那就不需要任何注解
2、Content-Type:application/json;charset=UTF-8
![](https://i-blog.csdnimg.cn/blog_migrate/d59d6e63c2d6c08690ef254bc24120ab.webp?x-image-process=image/format,png)
对应的后端处理方式,设置@RequestBody
![](https://i-blog.csdnimg.cn/blog_migrate/d2561d350acab50165769d6fd6a0d017.webp?x-image-process=image/format,png)
3、Content-Type:multipart/form-data;
![](https://i-blog.csdnimg.cn/blog_migrate/e3ecf1cf7a2df114b6465eee56071ecd.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/aec4516b8d7bdd4395bf7e138b0c1c61.webp?x-image-process=image/format,png)
2018-1-29下班总结:
用get方式发送参数,拼接在url后:
![](https://i-blog.csdnimg.cn/blog_migrate/a8b15d12c0f6bad2df820a735b485067.webp?x-image-process=image/format,png)
后端处理:
![](https://i-blog.csdnimg.cn/blog_migrate/b9009ec9026ff7b68865bbc0112f7c70.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/df652d168de4e37bc135105053bc0be6.webp?x-image-process=image/format,png)
如果是Post请求:
1、前端传递的方式为:Body+application/x-www-form-urlencoded:
![](https://i-blog.csdnimg.cn/blog_migrate/ddfd333ceb178ae5caa2b3d737a792a6.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/374059d66a6edbcaa77ae1ad96dfc7f8.webp?x-image-process=image/format,png)
2、如果前端改成以json字符串的形式传递参数:
![](https://i-blog.csdnimg.cn/blog_migrate/209dd87aaf53d56a16d2345b2c9d1ee5.webp?x-image-process=image/format,png)
后端接收到json字符串,用阿里fastjson解析:
![](https://i-blog.csdnimg.cn/blog_migrate/0efb35bb70e2d7d0df2c0c13729b05d5.webp?x-image-process=image/format,png)
3、接着上一步的后端代码,如果前端改成form-data 的方式传递,则报错:
![](https://i-blog.csdnimg.cn/blog_migrate/7577b63ed349428ddc5e156cd4fa833b.webp?x-image-process=image/format,png)
将后端的代码改一下:
![](https://i-blog.csdnimg.cn/blog_migrate/52920ae1704a7024828ec0b74c3fb327.webp?x-image-process=image/format,png)
2、2如果前端是body+x-www-form-urlencoded方式传参,后端在解析字符串时报错:
![](https://i-blog.csdnimg.cn/blog_migrate/63dde95ec69b4d9fa6c9f8fbf3ed82c6.webp?x-image-process=image/format,png)
到这里,我们小小总结一下:
如果是POST+form-data的方式:
不需要做任何处理,直接用对象接收即可(不管有多少个对象):
![](https://i-blog.csdnimg.cn/blog_migrate/1e3609bae9b610af175bebd17f7f52fe.webp?x-image-process=image/format,png)
如果是POST+x-www.form-urlencoded的方式,可以加@RequestParam注解来获取(如果不传,则报错:
![](https://i-blog.csdnimg.cn/blog_migrate/69ed7bf7daadd796f21cef3578f955ae.webp?x-image-process=image/format,png)
如果是POSt+json格式传递(浏览器为Request Payload,postman为raw格式)的方式:
![](https://i-blog.csdnimg.cn/blog_migrate/77f9fba937e599f56c92b5395ac5d105.webp?x-image-process=image/format,png)
后端需要用@RequestBody注解标识字段,@RequestBody的作用是接收Http请求中参数,调用HttpMessageConverter接口转化为json或xml数据并绑定到对象上。同理,@ResponseBody也是调用HttpMessageConverter接口将数据转换成json或xml格式的数据,返回给前端。
![](https://i-blog.csdnimg.cn/blog_migrate/7e541c33d2a545df6e18918c59561252.webp?x-image-process=image/format,png)
最终的结论:
json格式的数据用@RequestBody注解让HttpMessageConverter转换成json数据绑定到对象上;
urlencoded或者form-data一般都用@RequestParam注解来标注(算是个规范吧,不加也可以),当是自己封装的实体对象时,什么都不用加。