SpringMVC参数绑定注解
2016-07-20 10:29
351 查看
以下文章转自“开涛的博客”
源博文地址:点击打开链接
在SpringMVC 的控制器中提供了很多请求数据绑定的注解,以及功能处理方法支持的参数类型:
请求参数绑定注解:
@RequestParam绑定单个请求参数值;
@PathVariable绑定URI模板变量值;
@CookieValue绑定Cookie数据值
@RequestHeader绑定请求头数据;
@ModelValue绑定参数到命令对象;
@SessionAttributes绑定命令对象到session;
@RequestBody绑定请求的内容区数据并能进行自动类型转换等。
@RequestPart绑定“multipart/data”数据,除了能绑定@RequestParam能做到的请求参数外,还能绑定上传的文件等。
1、@RequestParam绑定单个请求参数值
@RequestParam用于将请求参数区数据映射到功能处理方法的参数上。
public String requestparam1(@RequestParam String username)
请求中包含username参数(如/requestparam1?username=zhang),则自动传入。
public String requestparam2(@RequestParam("username") String username)
即通过@RequestParam("username")明确告诉Spring Web MVC使用username进行入参。
@RequestParam注解主要参数:
value:参数名字
required:是否必须,默认是true
defaultValue:默认值
多个同名参数接收方式:
public String requestparam7(@RequestParam(value="role") String[] roleList)
public String requestparam8(@RequestParam(value="list") List<String> list)
2、@PathVariable绑定URI模板变量值
@PathVariable用于将请求URL中的模板变量映射到功能处理方法的参数上。
@RequestMapping(value="/users/{userId}/topics/{topicId}")
public String test(@PathVariable(value="userId") int userId, @PathVariable(value="topicId") int topicId)
如请求的URL为“控制器URL/users/123/topics/456”,则自动将URL中模板变量{userId}和{topicId}绑定到通过@PathVariable注解的同名参数上,即入参后userId=123、topicId=456。
3、@CookieValue绑定Cookie数据值
@CookieValue用于将请求的Cookie数据映射到功能处理方法的参数上。
public String test(@CookieValue(value="JSESSIONID", defaultValue="") String sessionId)
public String test2(@CookieValue(value="JSESSIONID", defaultValue="") Cookie sessionId)
4、@RequestHeader绑定请求头数据
@RequestHeader用于将请求的头信息区数据映射到功能处理方法的参数上。
@RequestMapping(value="/header")
public String test(@RequestHeader("User-Agent") String userAgent, @RequestHeader(value="Accept") String[] accepts)
5、@ModelAttribute绑定请求参数到命令对象
①绑定请求参数到命令对象:放在功能处理方法的入参上时,用于将多个请求参数绑定到一个命令对象,从而简化绑定流程,而且自动暴露为模型数据用于视图页面展示时使用;
②暴露表单引用对象为模型数据:放在处理器的一般方法(非功能处理方法)上时,是为表单准备要展示的表单引用对象,如注册时需要选择的所在城市等,而且在执行功能处理方法(@RequestMapping注解的方法)之前,自动添加到模型对象中,用于视图页面展示时使用;
③暴露@RequestMapping方法返回值为模型数据:放在功能处理方法的返回值上时,是暴露功能处理方法的返回值为模型数据,用于视图页面展示时使用。
6、@SessionAttributes绑定命令对象到session
有时候我们需要在多次请求之间保持数据,一般情况需要我们明确的调用HttpSession的API来存取会话数据,如多步骤提交的表单。Spring
Web MVC提供了@SessionAttributes进行请求间透明的存取会话数据。
7、@Value绑定SpEL表示式
@Value用于将一个SpEL表达式结果映射到到功能处理方法的参数上。
public String test(@Value("#{systemProperties['java.vm.version']}") String jvmVersio
功能处理方法支持的参数类型:
1、ServletRequest/HttpServletRequest
和 ServletResponse/HttpServletResponse
public String requestOrResponse (ServletRequest servletRequest, HttpServletRequest httpServletRequest, ServletResponse servletResponse, HttpServletResponse httpServletResponse)
Spring Web MVC框架会自动帮助我们把相应的Servlet请求/响应(Servlet
API)作为参数传递过来。
2、InputStream/OutputStream
和 Reader/Writer
public void inputOrOutBody(InputStream requestBodyIn, OutputStream responseBodyOut)
requestBodyIn:获取请求的内容区字节流,等价于request.getInputStream();
responseBodyOut:获取相应的内容区字节流,等价于response.getOutputStream()。
public void readerOrWriteBody(Reader reader, Writer writer)
reader:获取请求的内容区字符流,等价于request.getReader();
writer:获取相应的内容区字符流,等价于response.getWriter()。
3、WebRequest/NativeWebRequest
public String webRequest(WebRequest webRequest, NativeWebRequest nativeWebRequest)
① webRequest.getParameter:访问请求参数区的数据,可以通过getHeader()访问请求头数据;
② webRequest.setAttribute/getAttribute:到指定的作用范围内取/放属性数据,Servlet定义的三个作用范围分别使用如下常量代表:
SCOPE_REQUEST :代表请求作用范围;
SCOPE_SESSION :代表会话作用范围;
SCOPE_GLOBAL_SESSION :代表全局会话作用范围,即ServletContext上下文作用范围。
③ nativeWebRequest.getNativeRequest/nativeWebRequest.getNativeResponse:得到本地的Servlet API。
4、HttpSession
public String session(HttpSession session)
5、命令/表单对象
Spring Web MVC能够自动将请求参数绑定到功能处理方法的命令/表单对象上。
@RequestMapping(value = "/commandObject", method = RequestMethod.GET)
public String toCreateUser(HttpServletRequest request, UserModel user) {
return "customer/create";}
@RequestMapping(value = "/commandObject", method = RequestMethod.POST)
public String createUser(HttpServletRequest request, UserModel user) {
System.out.println(user);
return "success";}
如果提交的表单(包含username和password文本域),将自动将请求参数绑定到命令对象user中去。
6、Model、Map、ModelMap
Spring Web MVC 提供Model、Map或ModelMap让我们能去暴露渲染视图需要的模型数据。
@RequestMapping(value = "/model")
public String createUser(Model model, Map model2, ModelMap model3) {
model.addAttribute("a", "a");
model2.put("b", "b");
model3.put("c", "c");
System.out.println(model == model2);
System.out.println(model2 == model3);
return "success";}
虽然此处注入的是三个不同的类型(Model model, Map model2, ModelMap model3),但三者是同一个对象。
7、Errors/BindingResult
@RequestMapping(value = "/error1")
public String error1(UserModel user, BindingResult result)
@RequestMapping(value = "/error2")
public String error2(UserModel user, BindingResult result, Model model)
@RequestMapping(value = "/error3")
public String error3(UserModel user, Errors errors)
源博文地址:点击打开链接
在SpringMVC 的控制器中提供了很多请求数据绑定的注解,以及功能处理方法支持的参数类型:
请求参数绑定注解:
@RequestParam绑定单个请求参数值;
@PathVariable绑定URI模板变量值;
@CookieValue绑定Cookie数据值
@RequestHeader绑定请求头数据;
@ModelValue绑定参数到命令对象;
@SessionAttributes绑定命令对象到session;
@RequestBody绑定请求的内容区数据并能进行自动类型转换等。
@RequestPart绑定“multipart/data”数据,除了能绑定@RequestParam能做到的请求参数外,还能绑定上传的文件等。
1、@RequestParam绑定单个请求参数值
@RequestParam用于将请求参数区数据映射到功能处理方法的参数上。
public String requestparam1(@RequestParam String username)
请求中包含username参数(如/requestparam1?username=zhang),则自动传入。
public String requestparam2(@RequestParam("username") String username)
即通过@RequestParam("username")明确告诉Spring Web MVC使用username进行入参。
@RequestParam注解主要参数:
value:参数名字
required:是否必须,默认是true
defaultValue:默认值
多个同名参数接收方式:
public String requestparam7(@RequestParam(value="role") String[] roleList)
public String requestparam8(@RequestParam(value="list") List<String> list)
2、@PathVariable绑定URI模板变量值
@PathVariable用于将请求URL中的模板变量映射到功能处理方法的参数上。
@RequestMapping(value="/users/{userId}/topics/{topicId}")
public String test(@PathVariable(value="userId") int userId, @PathVariable(value="topicId") int topicId)
如请求的URL为“控制器URL/users/123/topics/456”,则自动将URL中模板变量{userId}和{topicId}绑定到通过@PathVariable注解的同名参数上,即入参后userId=123、topicId=456。
3、@CookieValue绑定Cookie数据值
@CookieValue用于将请求的Cookie数据映射到功能处理方法的参数上。
public String test(@CookieValue(value="JSESSIONID", defaultValue="") String sessionId)
public String test2(@CookieValue(value="JSESSIONID", defaultValue="") Cookie sessionId)
4、@RequestHeader绑定请求头数据
@RequestHeader用于将请求的头信息区数据映射到功能处理方法的参数上。
@RequestMapping(value="/header")
public String test(@RequestHeader("User-Agent") String userAgent, @RequestHeader(value="Accept") String[] accepts)
5、@ModelAttribute绑定请求参数到命令对象
①绑定请求参数到命令对象:放在功能处理方法的入参上时,用于将多个请求参数绑定到一个命令对象,从而简化绑定流程,而且自动暴露为模型数据用于视图页面展示时使用;
②暴露表单引用对象为模型数据:放在处理器的一般方法(非功能处理方法)上时,是为表单准备要展示的表单引用对象,如注册时需要选择的所在城市等,而且在执行功能处理方法(@RequestMapping注解的方法)之前,自动添加到模型对象中,用于视图页面展示时使用;
③暴露@RequestMapping方法返回值为模型数据:放在功能处理方法的返回值上时,是暴露功能处理方法的返回值为模型数据,用于视图页面展示时使用。
6、@SessionAttributes绑定命令对象到session
有时候我们需要在多次请求之间保持数据,一般情况需要我们明确的调用HttpSession的API来存取会话数据,如多步骤提交的表单。Spring
Web MVC提供了@SessionAttributes进行请求间透明的存取会话数据。
7、@Value绑定SpEL表示式
@Value用于将一个SpEL表达式结果映射到到功能处理方法的参数上。
public String test(@Value("#{systemProperties['java.vm.version']}") String jvmVersio
功能处理方法支持的参数类型:
1、ServletRequest/HttpServletRequest
和 ServletResponse/HttpServletResponse
public String requestOrResponse (ServletRequest servletRequest, HttpServletRequest httpServletRequest, ServletResponse servletResponse, HttpServletResponse httpServletResponse)
Spring Web MVC框架会自动帮助我们把相应的Servlet请求/响应(Servlet
API)作为参数传递过来。
2、InputStream/OutputStream
和 Reader/Writer
public void inputOrOutBody(InputStream requestBodyIn, OutputStream responseBodyOut)
requestBodyIn:获取请求的内容区字节流,等价于request.getInputStream();
responseBodyOut:获取相应的内容区字节流,等价于response.getOutputStream()。
public void readerOrWriteBody(Reader reader, Writer writer)
reader:获取请求的内容区字符流,等价于request.getReader();
writer:获取相应的内容区字符流,等价于response.getWriter()。
3、WebRequest/NativeWebRequest
public String webRequest(WebRequest webRequest, NativeWebRequest nativeWebRequest)
① webRequest.getParameter:访问请求参数区的数据,可以通过getHeader()访问请求头数据;
② webRequest.setAttribute/getAttribute:到指定的作用范围内取/放属性数据,Servlet定义的三个作用范围分别使用如下常量代表:
SCOPE_REQUEST :代表请求作用范围;
SCOPE_SESSION :代表会话作用范围;
SCOPE_GLOBAL_SESSION :代表全局会话作用范围,即ServletContext上下文作用范围。
③ nativeWebRequest.getNativeRequest/nativeWebRequest.getNativeResponse:得到本地的Servlet API。
4、HttpSession
public String session(HttpSession session)
5、命令/表单对象
Spring Web MVC能够自动将请求参数绑定到功能处理方法的命令/表单对象上。
@RequestMapping(value = "/commandObject", method = RequestMethod.GET)
public String toCreateUser(HttpServletRequest request, UserModel user) {
return "customer/create";}
@RequestMapping(value = "/commandObject", method = RequestMethod.POST)
public String createUser(HttpServletRequest request, UserModel user) {
System.out.println(user);
return "success";}
如果提交的表单(包含username和password文本域),将自动将请求参数绑定到命令对象user中去。
6、Model、Map、ModelMap
Spring Web MVC 提供Model、Map或ModelMap让我们能去暴露渲染视图需要的模型数据。
@RequestMapping(value = "/model")
public String createUser(Model model, Map model2, ModelMap model3) {
model.addAttribute("a", "a");
model2.put("b", "b");
model3.put("c", "c");
System.out.println(model == model2);
System.out.println(model2 == model3);
return "success";}
虽然此处注入的是三个不同的类型(Model model, Map model2, ModelMap model3),但三者是同一个对象。
7、Errors/BindingResult
@RequestMapping(value = "/error1")
public String error1(UserModel user, BindingResult result)
@RequestMapping(value = "/error2")
public String error2(UserModel user, BindingResult result, Model model)
@RequestMapping(value = "/error3")
public String error3(UserModel user, Errors errors)
相关文章推荐
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- Spring和ThreadLocal
- Spring Boot 开发微服务
- Spring AOP动态代理-切面
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)
- 模拟Spring的简单实现
- Spring整合WebSocket应用示例(上)
- spring+html5实现安全传输随机数字密码键盘
- Spring中属性注入详解
- 监听器获取Spring配置文件的方法
- Java利用Sping框架编写RPC远程过程调用服务的教程
- springmvc 发送ajax出现中文乱码的解决方法汇总
- Spring MVC中Ajax实现二级联动的简单实例
- SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
- 详解Java的MyBatis框架和Spring框架的整合运用
- struts2 spring整合fieldError问题