您的位置:首页 > 编程语言 > Java开发

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)   

 


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring java web spring mvc