Spring的参数绑定
Spring的参数绑定是一个重要的特性,基础知识参考慕课网
在文章HTTP参数讲解中我们提到有很多种不同的方式来进行参数传输,本文介绍在不同的Content-type下如何进行参数绑定
application/x-www-form-urlencoded
这个是最常见的参数绑定格式, 也是SpringMVC默认的参数绑定选项 由于是简单的Key-Value对,没有什么需要特别注意的
application/json
如果想使用SpringMVC对JSON方式的参数进行接收的话,需要
- 引入Jackson参数绑定Jar包
- Controller的参数中加入@RequestBody 提醒函数从HTTP报文体中进行参数绑定
pom.xml
注意选择较新版本的jackson-databind
1 | <dependency> |
Controller中加注解
1 | public String json(@RequestBody JsonObject jsonObject) { |
multipart/form-data
采用复合传输并且调用SpringMVC进行绑定必须满足以下条件
- 引入common-fileload的Jar包
- 配置SpringMVC的multipartResolver
- 使用Post请求发送报文
pom.xml
1 | <dependency> |
spring-mvc.xml
1 | <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> |
构造请求
除了进行配置之外,一定要注意以下两点
- 一定要使用Post请求,并不是Get请求有错,是因为multipartResolver只解析Post请求的参数绑定
- spring-mvc中的Bean一定要带ID,且必须命名multipartResolver,才能被Spring找到
如何接收文件
可以使用与文件Key名相同的 MultipartFile 形参来接收文件,即使放入Object也可以被自动绑定上
1 | @RequestMapping("/multipart") |
机智的年轻人: 使用x-www-form-urlencoded接收JSON和文件
在大部分情况下,如果要针对不同的格式使用不同Content-type进行传输,对于前端开发来说,不便于网络请求模块的复用
于是就有聪明的小伙伴采用把数据放入Key-Value的Value中的方式传递复杂数据。
放入JSON
将JSON字符串视作普通的字符串,放入某一个指定的Key,在后台通过该Key值将JSON作为普通的String取出,然后对其进行解析,自己转化为Object,而不是使用Spring的参数绑定
1 | //username:name |
接收文件
将文件的元数据进行BASE64编码,放入Key-Value的Value中,然后后台进行解码获取到元数据,还原成文件
1 | username=name&password=pass&file=(文件的BASE64编码) |