分析参数获取,首先要了解http请求时,参数如何存放,有几种方式,否则没有所谓的获取
GET比较简单,没有body,所以获取url上的参数(key=value)。
POST不仅可以在url上放,参数还可以放在body
body根据contentType分为以下几种情况
application/x-www-form-urlencoded
POST http://127.0.0.1:8888/demo HTTP/1.1 Content-Type: application/x-www-form-urlencoded;charset=utf-8 title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3
multipart/form-data(一般为传输文件时候用)
body数据以boundary分隔,如
POST http://127.0.0.1 HTTP/1.1 Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA ------WebKitFormBoundaryrGKCBY7qhFd3TrwA Content-Disposition: form-data; name="text" title ------WebKitFormBoundaryrGKCBY7qhFd3TrwA Content-Disposition: form-data; name="file"; filename="chrome.png" Content-Type: image/png PNG ... content of chrome.png ... ------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
text/plain application/json text/html等等(统称为raw)
{"value":"money"}
我们平时写接口一般用application/json
表单默认是application/x-www-form-urlencoded,也可以设置为multipart/form-data
那么,如何用springmvc来获取参数
GET请求获取参数有如下方法
方法1 request.getPrameter("xxx")
方法2 @RequestParam String xxx
注意:
request.getPrameter("xxx") == request.getPrameterValues("xxx")[0]
@RequestParam String xxx == request.getPrameterValues("xxx") 循环并逗号分开
一般一个参数名对应一个值,request.getPrameter("xxx")获取的值和@RequestParam String xxx是一样的。当有多个值就有所区别
eg:http://127.0.0.1:8888/demo?xxx=a&xxx=b
request.getPrameter("xxx") = a
@RequestParam String xxx = a,b
request.getPrameterValues("xxx")=[a,b]
POST url参数获取方式和GET一样
POST application/x-www-form-urlencoded获取方式和GET一样
POST multipart/form-data获取方式 @RequestParam MultipartFile file
注意:写form表单要记得修改enctype=multipart/form-data
POST application/json获取body json @RequestBody Object xxx
@RequestBody String xxx会获取body的String值,无论是什么contentType
一般这种情况,传输的是一个json对象,利用Springmvc,直接声明对象,可以帮你转换成你想要的对象。
基本覆盖常用获取参数的情况。后续有时间分析一下springmvc解析参数这块源码
ps:
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)
原文:https://www.cnblogs.com/turn2i/p/10480028.html