@RequestParam、@RequestBody 和@ModelAttribute
当前台界面使用 GET 或 POST 方式提交数据时,数据编码格式由请求头的 ContentType 指定。分为以下几种情况:
- application/x-www-form-urlencoded,这种情况的数据@RequestParam、@ModelAttribute 可以处理,@RequestBody 也可以处理。
- multipart/form-data,@RequestBody 不能处理这种格式的数据。(form 表单里面有文件上传时,必须要指定 enctype 属性值为 multipart/form-data,意思是以二进制流的形式传输文件。)
- application/json、application/xml 等格式的数据,必须使用@RequestBody 来处理。
@RequestParam
- GET 和 POST 请求传的参数会自动转换赋值到@RequestParam 所注解的变量上。
- 处理
Content-Type: application/x-www-form-urlencoded编码格式的数据。 - 实质是将 Request.getParameter() 中的 Key-Value 参数 Map 利用 Spring 的转化机制 ConversionService 配置,转化成参数接收对象或字段。
- 请求样例
- 请求端
1 | $.ajax({ |
- 接收端
1 | public testInter( String name, String pwd){ |
@RequestBody
@RequestBody 注解可以接收 json 格式的数据,并将其转换成对应的数据类型。
处理 HttpEntity 传递过来的数据,一般用来处理非 Content-Type: application/x-www-form-urlencoded 编码格式的数据。
可通过对象和 Map 接收。
用于 post 请求,不能用于 get 请求,GET 请求中,因为没有 HttpEntity,所以@RequestBody 并不适用。
POST 请求中,通过 HttpEntity 传递的参数,必须要在请求头中声明数据的类型 Content-Type,SpringMVC 通过使用 HandlerAdapter 配置的 HttpMessageConverters 来解析 HttpEntity 中的数据,然后绑定到相应的 bean 上。
请求样例
- 请求端
1 | $.ajax({ |
- 接收端
1 |
|
@ModelAttribute
- @ModelAttribute 注解类型将参数绑定到 Model 对象
- 请求样例
- 发送端
1 | $.ajax({ |
- 接收端
1 |
|
Leave a comment