请求数据传入(SpringMVC)
1. 请求处理方法签名
Spring MVC 通过分析处理方法的签名,HTTP请求信息绑定到处理方法的相应人参中。
Spring MVC 对控制器处理方法签名的限制是很宽松的,几乎可以按喜欢的任何方式对方法进行签名。
必要时可以对方法及方法入参标注相应的注解( @PathVariable 、@RequestParam、@RequestHeader 等)、
Spring MVC 框架会将 HTTP 请求的信息绑定到相应的方法入参中,并根据方法的返回值类型做出相应的后续处理。
即
① RequestMapping_请求参数&请求头【了解】
//了解: 可以使用 params 和 headers 来更加精确的映射请求. params 和 headers 支持简单的表达式. @RequestMapping(value="/testParamsAndHeaders", params= {"username","age!=10"}, headers = { "Accept-Language=en-US,zh;q=0.8" }) public String testParamsAndHeaders(){ System.out.println("testParamsAndHeaders..."); return "success"; }
<a href="springmvc/testParamsAndHeaders?username=atguigu&age=15">testParamsAndHeaders</a>
2. @RequestParam注解(把请求参数传递给请求方法)
- 在处理方法入参处使用 @RequestParam 可以把请求参数传递给请求方法(<form>)
- value:参数名
- required:是否必须。默认为 true, 表示请求参数中必须包含对应的参数,若不存在,将抛出异常
- defaultValue: 默认值,当没有传递参数时使用该值
/** * @PathVariable是必须带的,没有required=false可以设置 * @ModelAttribute放在方法前会在每个方法前执行,如果不存在占位符{id},就会报错 * 所以使用@RequestParam,设置required=false,同时提交的表格需要添加该参数 * @param id * @param model */ @ModelAttribute public void getEmployee(@RequestParam(value="id",required=false)Integer id,Model model){ Employee employee = employeeDao.get(id); if(employee != null) model.addAttribute("employee", employee); System.out.println("查出的员工:"+employee); }
3. @RequestHeader 注解
- 使用 @RequestHeader 绑定请求报头的属性值
- 请求头包含了若干个属性,服务器可据此获知客户端的信息,通过 @RequestHeader 即可将请求头中的属性值绑定到处理方法的入参中
//了解: 映射请求头信息 用法同 @RequestParam @RequestMapping(value="/testRequestHeader") public String testRequestHeader(@RequestHeader(value="Accept-Language") String al){ System.out.println("testRequestHeader - Accept-Language:"+al); return "success"; } <!-- 测试 请求头@RequestHeader 注解使用 --> <a href="springmvc/testRequestHeader">testRequestHeader</a>
4. @CookieValue 注解
使用 @CookieValue 绑定请求中的 Cookie 值
@CookieValue 可让处理方法入参绑定某个 Cookie 值
5. 使用POJO作为参数
使用 POJO 对象绑定请求参数值
Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配,自动为该对象填充属性值。支持级联属性。如:dept.deptId、dept.address.tel 等
6. 使用Servlet原生API作为参数
MVC 的 Handler 方法可以接受哪些 ServletAPI 类型的参数
/** * 可以使用 Serlvet 原生的 API 作为目标方法的参数 具体支持以下类型 * * HttpServletRequest * HttpServletResponse * HttpSession * java.security.Principal * Locale InputStream * OutputStream * Reader * Writer * @throws IOException */ @RequestMapping("/testServletAPI") public void testServletAPI(HttpServletRequest request,HttpServletResponse response, Writer out) throws IOException { System.out.println("testServletAPI, " + request + ", " + response); out.write("hello springmvc"); //return "success"; } <!-- 测试 Servlet API 作为处理请求参数 --> <a href="springmvc/testServletAPI">testServletAPI</a>
7. RequestMapping映射请求占位符PathVariable注解
@PathVariable 映射 URL 绑定的占位符
带占位符的 URL 是 Spring3.0 新增的功能,该功能在 SpringMVC 向 REST 目标挺进发展过程中具有里程碑的意义
通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:
URL 中的 {xxx} 占位符可以通过 @PathVariable("xxx") 绑定到操作方法的入参中。
//@PathVariable 注解可以将请求URL路径中的请求参数,传递到处理请求方法的入参中 @RequestMapping(value="/testPathVariable/{id}") public String testPathVariable(@PathVariable("id") Integer id){ System.out.println("testPathVariable...id="+id); return "success"; } //② 请求链接 <!-- 测试 @PathVariable --> <a href="springmvc/testPathVariable/1">testPathVariable</a>
总结:从目前情况来看@PathVariable、@RequestParam这两个用得比较多,当然还有@ModelAttribute(这个在另外的随笔进行了描写)