springmvc 常用的绑定参数用法
2016-04-11 20:35
363 查看
当请求路径和方法匹配之后,请求便进入方法体里面进行处理业务,在这之前,springmvc会做一些参数绑定,格式化,已经校验。springmvc在参数绑定方面,给我们带来巨大便利,现在我们来看看支持哪些参数类型
用原生的servlet api做为参数
springmvc还专门为HttpServletRequest 封装了俩个类,这俩个类也可以作为参数传进来,
利用java.util.Locale获取本地化信息,Locale本地化信息由LocaleResolver / LocaleContextResolver配置
利用java.util.TimeZone解析时区,由LocaleContextResolver配置
用输入流作为参数,可处理上传文件文件
用输出流做参数,可处理下载文件
利用org.springframework.http.HttpMethod读取请求方法
@RequestMapping(“/mvc7”)
public void mvc7(HttpMethod reqMethod) throws IOException{
利用java.security.Principal 获取当前登录用户的一些信息
利用@PathVariable获取请求变量
利用@MatrixVariable 获取矩阵请求变量,需要在配置文件将矩阵请求打开,请求类似/cars;color=red;year=2012
利用@RequestParam来绑定请求参数,不能绑定content-type为application/xml和application/json的媒体类型
利用@RequestPart除来绑定multipart/form-data
利用@CookieValue除来绑定cookie值
利用@RequestHeader获取头部信息
利用@RequestBody来绑定类似application/json,application/xml的媒体类型请求,目前测试的springmvc的版本是4.1.4,直接加入jackson-annotations-2.7.3.jar,jackson-core-2.7.3.jar,jackson-databind-2.7.3.jar,jackson-dataformat-xml-2.7.3.jar,前端在请求的时候,需要加入需要的content-type
前端这里利用jquery的ajax
@requestBody在实现上是利用HttpMessageConverters实现,HttpMessageConverter默认注册了了以下
ByteArrayHttpMessageConverter 转化字节.
StringHttpMessageConverter 转化字符串
FormHttpMessageConverter 转化数据到MultiValueMap
但这里其实,我们不需要注册,因为当我们在配置文件配置spingmvc会检测com.fasterxml.jackson.databind.ObjectMapper和com.fasterxml.jackson.dataformat.xml.XmlMapper类是否存在,存在则自动注册MappingJackson2HttpMessageConverter和MappingJackson2XmlHttpMessageConverter。所以我们只需要按常规配置就可以了
springmvc的参数默认编码是iso-8859-1消息转化器的作用还能帮我们解决乱码问题
除了@RequestBody利用HttpMessageConverter处理之外,HttpEntity
利用@ModelAttribute 来将参数绑定到模型中
利用java.util.Map / org.springframework.ui.Model / org.springframework.ui.ModelMap读写模型数据
利用@Validated校验参数,利用org.springframework.validation.Errors / org.springframework.validation.BindingResult 获取参数校验结果
利用org.springframework.web.util.UriComponentsBuilder 这个类能用于构建和编码URI,包括支持URI模板
用原生的servlet api做为参数
@RequestMapping("/mvc1") public void mvc1(HttpServletRequest request,HttpServletResponse response,HttpSession session) { ServletContext context = request.getServletContext(); }
springmvc还专门为HttpServletRequest 封装了俩个类,这俩个类也可以作为参数传进来,
@RequestMapping("/mvc2") public void mvc2(WebRequest webRequest,NativeWebRequest nativeWebRequest) { }
利用java.util.Locale获取本地化信息,Locale本地化信息由LocaleResolver / LocaleContextResolver配置
@RequestMapping("/mvc3") public void mvc3(Locale local) { System.out.println("首都:" + local.getCountry() + " 国语" + local.getLanguage() + " "); }
利用java.util.TimeZone解析时区,由LocaleContextResolver配置
@RequestMapping("/mvc4") public void mvc4(TimeZone zone) { }
用输入流作为参数,可处理上传文件文件
@RequestMapping("/mvc5") public void mvc5(InputStream is ,Reader reader) throws IOException{ FileUtils.copyInputStreamToFile(is, new File("D://color.png")); //将输入流保存成文件 }
用输出流做参数,可处理下载文件
@RequestMapping("/mvc6") public void mvc6(OutputStream os ,Writer write,InputStream is) throws IOException{ os.write(FileCopyUtils.copyToByteArray(is)); //将输入流写到客户端,可用于下载文件 }
利用org.springframework.http.HttpMethod读取请求方法
@RequestMapping(“/mvc7”)
public void mvc7(HttpMethod reqMethod) throws IOException{
System.out.println(reqMethod.name()); }
利用java.security.Principal 获取当前登录用户的一些信息
@RequestMapping("/mvc8") public void mvc8(Principal principal) throws IOException{ System.out.println(principal.getName()); }
利用@PathVariable获取请求变量
@RequestMapping("/mvc9/{id}") public void mvc9(@PathVariable Long id) throws IOException{ System.out.println(id); }
利用@MatrixVariable 获取矩阵请求变量,需要在配置文件将矩阵请求打开,请求类似/cars;color=red;year=2012
@RequestMapping("/mvc10/") public void mvc10(@MatrixVariable Long id) throws IOException{ System.out.println(id); } //在dispatch-content.xml配置打开允许矩阵请求格式 <mvc:annotation-driven enable-matrix-variables="true"> </mvc:annotation-driven>
利用@RequestParam来绑定请求参数,不能绑定content-type为application/xml和application/json的媒体类型
/** * 默认required为true,当为true时,如果请求参数没有name,则报错 * @param name * @throws IOException */ @RequestMapping("/mvc11/") public void mvc11(@RequestParam(value = "name", required = false ,defaultValue = "我是谁") String name) throws IOException{ }
利用@RequestPart除来绑定multipart/form-data
@RequestMapping("/mvc21") public void mvc21(@RequestPart("file") MultipartFile file) { }
利用@CookieValue除来绑定cookie值
@RequestMapping("/mvc22") public void mvc22(@CookieValue("JSESSIONID") String sessionId) { }
利用@RequestHeader获取头部信息
@RequestMapping("/mvc12/") public void mvc12(@RequestHeader("Accept-Encoding") String encoding, @RequestHeader("Keep-Alive") long keepAlive) { //... }
利用@RequestBody来绑定类似application/json,application/xml的媒体类型请求,目前测试的springmvc的版本是4.1.4,直接加入jackson-annotations-2.7.3.jar,jackson-core-2.7.3.jar,jackson-databind-2.7.3.jar,jackson-dataformat-xml-2.7.3.jar,前端在请求的时候,需要加入需要的content-type
@RequestMapping(value = "/mvc13", method = RequestMethod.POST, consumes="application/json") public void mvc13(HttpServletRequest req ,@RequestBody(required = false) List<Task> task) { } @RequestMapping(value = "/mvc14", method = RequestMethod.POST, consumes="application/xml") public void mvc14(HttpServletRequest req ,@RequestBody(required = false) List<Task> task) { }
前端这里利用jquery的ajax
function getXmlStr(){ var xml = "<?xml version = '1.0'?>" + "<ArrayList>" + " <item>" + " <taskName>taskName</taskName>" + " <createTime>1460195925557</createTime>" + " <taskDetail>taskDetail</taskDetail>" + " </item>" + " <item>" + " <taskName>taskName</taskName>" + " <createTime>1460195925557</createTime>" + " <taskDetail>taskDetail</taskDetail>" + " </item>" + "</ArrayList>" ; return xml; } function getJsonStr(){ var customerArray = new Array(); customerArray.push({taskName: "任务1"}); customerArray.push({taskName: "任务2"}); var jsonStr = JSON.stringify(customerArray); return jsonStr; } //xml的请求,后台直接直接用list<Task>接收 $.ajax({ url : "/whats/task/mvcTest10", contentType : "application/xml", data : getXmlStr(), type : "post", success : function(data){ }, error : function(error){ } }); //json请求,后台直接直接用list<Task>接收 $.ajax({ url : "/whats/task/mvcTest10", contentType : "application/xml", data : getJsonStr(), type : "post", success : function(data){ }, error : function(error){ } });
@requestBody在实现上是利用HttpMessageConverters实现,HttpMessageConverter默认注册了了以下
ByteArrayHttpMessageConverter 转化字节.
StringHttpMessageConverter 转化字符串
FormHttpMessageConverter 转化数据到MultiValueMap
<mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" /> <bean class="org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter" /> </mvc:message-converters> </mvc:annotation-driven>
但这里其实,我们不需要注册,因为当我们在配置文件配置spingmvc会检测com.fasterxml.jackson.databind.ObjectMapper和com.fasterxml.jackson.dataformat.xml.XmlMapper类是否存在,存在则自动注册MappingJackson2HttpMessageConverter和MappingJackson2XmlHttpMessageConverter。所以我们只需要按常规配置就可以了
<mvc:annotation-driven />
springmvc的参数默认编码是iso-8859-1消息转化器的作用还能帮我们解决乱码问题
<mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg value="UTF-8" /> <property name="supportedMediaTypes"> <list> <value>application/json;charset=UTF-8</value> <value>text/html;charset=UTF-8</value> <value>application/xml;charset=UTF-8</value> </list> </property> </bean> </mvc:message-converters> </mvc:annotation-driven>
除了@RequestBody利用HttpMessageConverter处理之外,HttpEntity
@RequestMapping(value = "/mvc15", method = RequestMethod.POST, consumes="application/json") public void mvc15(HttpEntity<List<Task>> task) { List<Task> tasks = task.getBody(); HttpHeaders headers = task.getHeaders(); }
利用@ModelAttribute 来将参数绑定到模型中
@RequestMapping("/mvc23") public void mvc23(@ModelAttribute Task task) { }
利用java.util.Map / org.springframework.ui.Model / org.springframework.ui.ModelMap读写模型数据
/** * 任何请求进入方法之前,都会先进入这个方法,将task放到模型数据中 * @return */ @ModelAttribute public Task getTask() { Task task = new Task(); task.setTaskDetail("mydetai"); task.setTaskName("mytaskName"); return task; } @RequestMapping("/mvc16") public void mvc16(ModelMap modelMap) { modelMap.get("task"); //获取模型数据 modelMap.addAttribute("task", new Task()) ; //添加模型数据 }
利用@Validated校验参数,利用org.springframework.validation.Errors / org.springframework.validation.BindingResult 获取参数校验结果
@RequestMapping("/mvc17") public void mvc17(@Validated Task task,BindingResult result) { if (result.hasErrors()) { //.. } }
利用org.springframework.web.util.UriComponentsBuilder 这个类能用于构建和编码URI,包括支持URI模板
@RequestMapping("/mvc19") public void mvc19(UriComponentsBuilder ucb) { UriComponents uriComponents = ucb.scheme("http").host("example.com").path("/hotels/{hotel}/bookings/{booking}").build() .expand("42", "21") .encode(); URI uri = uriComponents.toUri(); }
相关文章推荐
- java 连接Access数据库
- 运维调试记录:Ubuntu下通过PPA方式安装Java 8并自动配置环境变量
- spring security:自定义认证成功处理器
- 码农小汪-spring框架学习之6-spring基于注解的容器配置 @Qualifier @Autowired @Resouce @PostConstruct @PreDestroy
- springmvc 相应静态资源,view-controler-path
- 简单springmvc搭建流程
- Java 接口和抽象类区别
- 开发javaweb遇到的一些小问题。
- ubuntu下配置java环境
- Java操作elasticsearch
- JAVA-转型
- Spring笔记3
- 一个类搞懂JAVA Class文件
- 树的子结构
- Java并发学习之十七——线程同步工具之CountDownLatch
- Java设计模式系列之策略模式
- java中两个整数相除得到小数点并保留两位小数的方法
- [Java]读取Excel
- java作业。。。
- struts2框架的异常处理