首页 > 代码库 > Spring MVC HTTP请求数据绑定
Spring MVC HTTP请求数据绑定
package com.springmvc.controller; import com.springmvc.model.UserInfo; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.stereotype.Controller; import org.springframework.util.FileCopyUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.context.request.WebRequest; import org.springframework.web.servlet.ModelAndView; import java.io.IOException; import java.io.OutputStream; /** * <p>HTTP请求数据绑定</p> * <p> * 通过注解绑定: * 1.@RequestParam->绑定请求参数 * 2.@PathVariable->绑定URL中的变量 * 3.@RequestHeader->绑定请求头参数 * 4.@CookieValue->绑定Cookie值 * 使用Servlet API对象作为入参: * 1.HttpServletRequest * 2.HttpServletResponse * 3.HttpSession * 使用Spring的Servlet API代理类 * 1.WebRequest * 使用IO对象作为入参 * 1.java.io.InputStream/java.io.Reader * 2.java.io.outputStream/java.io.Write * 其它:Local * <p> * <p> * </p> * <p> * Created by liaody on 2017/4/30. */ @Controller("dataBindController") public class DataBindController { /** * default constructor */ public DataBindController() { } /** * <p>@RequestParam->绑定请求参数。</p> * <p>RequestMapping限定中不需要写明参数,当参数中含有指定的参数名时会实现自动绑定。</p> * <p> * 需要注意的是@RequestParam有三个参数,分别是默认的value、required(默认为true)、defaultValue默认值(不推荐使用)。 * 当请求中不存在对应的参数时,会抛出异常。如果参数不是必须的可以将required设置为false(例子中的userEmail)。 * </p> * <p> * 请求URL:http://localhost:8080/requestParamBind?userName=ldy&userPassword=123 * </p> * @return */ @RequestMapping(value = "/requestParamBind") public ModelAndView requestParamBind(@RequestParam("userName") String userName, @RequestParam("userPassword") String userPassword, @RequestParam(value = "http://www.mamicode.com/userEmail", required = false) String userEmail) { ModelAndView mv = new ModelAndView(); System.out.println("使用@RequestParam绑定请求参数中的userName、userPassword、userEmail"); System.out.println("userName:" + userName); System.out.println("userPassword:" + userPassword); mv.setViewName("/success"); mv.addObject("message", "userName/userPassword" + userName + "/" + userPassword); return mv; } /** * <p>@PathVariable->绑定URL中的变量。</p> * <p>示例: * value="http://www.mamicode.com/user/**/{userId},匹配/user/aa/123、/user/aa/bb/abc、/user/aa/bb/cc/ddd>http://localhost:8080/user/aa/123、http://localhost:8080/user/aa/bb/abc、http://localhost:8080/user/aa/bb/cc/ddd * </p> * * @return */ @RequestMapping(value = "user/**/{userId}") public ModelAndView requestParamBindVariable(@PathVariable("userId") String userId) { ModelAndView mv = new ModelAndView(); System.out.println("使用@PathVariable注解绑定参数userId:" + userId); mv.addObject("message", "绑定参数userId" + userId); mv.setViewName("/success"); return mv; } /** * <p>使用命令/表单对象绑定</p> * <p> * 所谓命令/表单对象并不需要实现任何接口,仅是一个拥有若干个属性的POJO,SpringMvc按照:“HTTP请求参数名=命令/表单对象的属性名”的 * 的规则,自动绑定请求请求数据,支持级联属性名,自动进行基本数据类型的转换。 * </p> * <p> * 请求URL:http://localhost:8080/requestParamBindPojo?userName=YY&userPassword=ZZ&userLoginFlag=1&userLoginflag=1&userEmail=22@.qq.com * </p> * <p> * userName=YY&userPassword=ZZ&userLoginFlag=1&userLoginflag=1&userEmail=22@.qq.com->自动映射到UserInfo类型实例userInfo上 * </p> * * @return */ @RequestMapping(value = "/requestParamBindPojo") public ModelAndView requestParamBindPojo(UserInfo userInfo) { ModelAndView mv = new ModelAndView(); System.out.println(userInfo.toString()); mv.setViewName("/success"); mv.addObject("message", "命令/表单对象绑定" + userInfo.toString()); return mv; } /** * <p> @RequestHeader->绑定请求头参数、@CookieValue->绑定Cookie值</p> * <p> * 请求URL:http://localhost:8080/requestParamBindCookieAndHeader * </p> * * @return */ @RequestMapping(value = "/requestParamBindCookieAndHeader") public ModelAndView requestParamBindCookieAndHeader(@CookieValue("JSESSIONID") String sessionId, @RequestHeader("Accept-Language") String language) { ModelAndView mv = new ModelAndView(); System.out.println("sessionid:" + sessionId); System.out.println("language:" + language); mv.setViewName("/success"); mv.addObject("message", "sessionId" + sessionId); mv.addObject("message2", "language:" + language); return mv; } /** * <p> 使用Spring的Servlet API代理类/p> * <p> * Spring MVC 在org.spirngframework.web.context.request包中定义了若干个可代理的Servlet原生API, * 例如WebRequest和NativeWebRequest,他们也允许作为处理类的入参,通过这些代理类可以访问到请求对象的任何信息。 * </p> * <p> * 请求URL:http://localhost:8080/requestParamBindWebRequest?user=liaody * </p> * * @return */ @RequestMapping(value = "/requestParamBindWebRequest") public ModelAndView requestParamBindWebRequest(WebRequest request) { ModelAndView mv = new ModelAndView(); String userName = request.getParameter("userName"); System.out.println("通过使用Spring的Servlet API代理类访问到原生的Servlet API,获取参数userName:" + userName); mv.setViewName("/success"); mv.addObject("message", "userName" + userName); return mv; } /** * <p> 使用IO对象作为入参/p> * <p> * Spring MVC允许控制器的处理方法使用java.io.InputStream/java.io.Reader及java.io.OutputStream/java.io.Writer作为方法的入参。 * Spring MVC将获取ServletRequest的InputStream/Reader或ServletResponse的OutputStream/Writer,然后按类型匹配的方式,传递给控制器的处理方法。 * 入参。 * </p> * <p> * 请求URL:http://localhost:8080/requestParamBindIO * </p> * * @return */ @RequestMapping(value = "/requestParamBindIO") public void requestParamBindIO(OutputStream os) throws IOException { Resource res = new ClassPathResource("/image.jpg");//读取类路径下的图片文件 FileCopyUtils.copy(res.getInputStream(), os);//将图片写到输出流中 } }
Spring MVC HTTP请求数据绑定
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。