控制器的请求处理方法的签名可以将任何事物作为参数,我们可以将HttpServletRequest、HttpServletResponse、 String或者数字参数传递进来,这些参数可以对应请求中的查询参数、cookie值、HTTP请求头的值或其他一些可能的选项。
下面一些例子来说明
- 使用@RequestParam绑定请求参数值
@RequestMapping(value="/method1") public String method1( @RequestParam(value="userName",required = false) String userName, @RequestParam("pwd") String pwd){ return "methodSignature"; }
- 使用@CookieValue绑定请求中的Cookie值
@RequestMapping(value="/method2") public String method2( @CookieValue(value="sessionId",required=false)String sessionId){ return "methodSignature"; }
- 使用@RequestHeader绑定请求报文头的属性值
@RequestMapping(value="/method3") public String method3( @RequestHeader("Accept-Encoding") String encoding, @RequestHeader("Keep-Alive") long keepAlive){ return "methodSignature"; }
- 使用@PathVariabl获取路径中传递参数
public ModelAndView helloWorld( @PathVariable String id, @PathVariable String str) { System.out.println(id); System.out.println(str); return new ModelAndView( " /helloWorld " ); }
- 使用表单对象绑定请求参数值
@RequestMapping(value="/method4") public String method4(User user){ return "methodSignature"; }
- 使用Servlet API对象作为入参
- 同时使用HttpServletRequest、HttpServletResponse、HttpSession
@RequestMapping(value="method5") public void method5( HttpServletRequest request, HttpServletResponse response, HttpSession session){ String userName = WebUtils.findParameterValue(request, "userName"); response.addCookie(new Cookie("userName",userName)); }
- 使用Servlet原生API接口,如WebRequest和NativeWebRequest等
@RequestMapping(value="method6") public String method6(WebRequest request){ String userName = request.getParameter("userName"); return "methodSignature"; }
- 使用IO对象作为入参
如java.io.InputStream/java.io.Reader 及java.io.OutputStream/java.io.Writer
@RequestMapping(value="method7") public void method7(OutputStream os) throws IOException{ Resource res = new ClassPathResource("/image.jpg");//读取类路径下的图片文件 FileCopyUtils.copy(res.getInputStream(), os); }
- 使用其他类型的参数
java.util.Locale/java.security.Principal
也可以通过Servlet的HttpServletRequest的getLocale()及getUserPrincipal()
@RequestMapping(value="method8") public String method8(Locale locale,Principal principal){ return "methodSignature"; }
-
- 同时使用HttpServletRequest、HttpServletResponse、HttpSession