Springmvc参数获取

分析参数获取,首先要了解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(返回数据)

猜你喜欢

转载自www.cnblogs.com/turn2i/p/10480028.html