<form action="/Test" method="get">
request param Test<br>
用户名称: <input type="text" name="username"><br>
用户密码: <input type="text" name="password"><br>
<input type="submit" value="提交">
</form>
创建资源表示类 -- 实体类
创建资源控制器 -- 控制器
@RestController
public class GreetingController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
// http://127.0.0.1:8080/greeting?name=xin yue
return new Greeting(counter.incrementAndGet(), String.format(template, name));
}
}
@RequestParam
GET和POST请求传的参数会自动转换赋值到@RequestParam 所注解的变量上
@RequestParam用于将指定的请求参数赋值给方法中的形参。
@RequestParam用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。提交方式为get或post。(Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型)
@RequestParam实质是将Request.getParameter() 中的Key-Value参数Map利用Spring的转化机制ConversionService配置,转化成参数接收对象或字段。
get方式中query String的值,和post方式中body data的值都会被Servlet接受到并转化到Request.getParameter()参数集中,所以@RequestParam可以获取的到。
org.springframework.web.bind.annotation.RequestParam
@RequestBody注解可以接收json格式的数据,并将其转换成对应的数据类型.
@RequestBody处理HttpEntity传递过来的数据,一般用来处理非Content-Type: application/x-www-form-urlencoded编码格式的数据.
GET请求中,因为没有HttpEntity,所以@RequestBody并不适用.
POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,SpringMVC通过使用HandlerAdapter 配置的HttpMessageConverters来解析HttpEntity中的数据,然后绑定到相应的bean上.
@ModelAttribute注解类型将参数绑定到Model对象.
当前台界面使用GET或POST方式提交数据时,数据编码格式由请求头的ContentType指定。分为以下几种情况:
1. application/x-www-form-urlencoded,这种情况的数据@RequestParam、@ModelAttribute可以处理,@RequestBody也可以处理。
2. multipart/form-data,@RequestBody不能处理这种格式的数据。(form表单里面有文件上传时,必须要指定enctype属性值为multipart/form-data,意思是以二进制流的形式传输文件。)
3. application/json、application/xml等格式的数据,必须使用@RequestBody来处理
网友评论