SpringMVC参数绑定注解

27 篇文章 0 订阅

以下文章转自“开涛的博客”

源博文地址:点击打开链接


在SpringMVC 的控制器中提供了很多请求数据绑定的注解,以及功能处理方法支持的参数类型:

请求参数绑定注解:

  1. @RequestParam绑定单个请求参数值;
  2. @PathVariable绑定URI模板变量值;
  3. @CookieValue绑定Cookie数据值
  4. @RequestHeader绑定请求头数据;
  5. @ModelValue绑定参数到命令对象;
  6. @SessionAttributes绑定命令对象到session
  7. @RequestBody绑定请求的内容区数据并能进行自动类型转换等。
  8. @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=123topicId=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

有时候我们需要在多次请求之间保持数据,一般情况需要我们明确的调用HttpSessionAPI来存取会话数据,如多步骤提交的表单。Spring Web MVC提供了@SessionAttributes进行请求间透明的存取会话数据。

 

7@Value绑定SpEL表示式

@Value用于将一个SpEL表达式结果映射到到功能处理方法的参数上。

public String test(@Value("#{systemProperties['java.vm.version']}") String jvmVersio



 

功能处理方法支持的参数类型:

1ServletRequest/HttpServletRequestServletResponse/HttpServletResponse

public String requestOrResponse (ServletRequest servletRequest, HttpServletRequest httpServletRequest, ServletResponse servletResponse, HttpServletResponse httpServletResponse)  

Spring Web MVC框架会自动帮助我们把相应的Servlet请求/响应(Servlet API)作为参数传递过来。

 

2InputStream/OutputStreamReader/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()

 

3WebRequest/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

 

4HttpSession

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";}

如果提交的表单(包含usernamepassword文本域),将自动将请求参数绑定到命令对象user中去。

 

6ModelMapModelMap

Spring Web MVC 提供ModelMapModelMap让我们能去暴露渲染视图需要的模型数据。

@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),但三者是同一个对象。

 

7Errors/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)   

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值