springmvc 参数绑定注解详解

来源:互联网 发布:三星手表gears软件 编辑:程序博客网 时间:2024/05/22 10:42

简介

  Handler method参数绑定常用的注解,我们根据它们处理request的不同内容部分来看主要分为四类:

  A. 处理requesr uri部分的注解,@PathVariable

  B. 处理 request header部分的注解,@RequestHeader,@CookieValue

  C. 处理 request body部分的注解,@RequestParam,@RequestBody

  D.   处理 attribute类型的注解,@SessionAttributes,@ModelAttribute

@PathVariable

 

  当使用@RequestMapping URI template样式(即someUrl/{paramId})映射的时候,可以通过此注解绑定它传过来的值到方法的参数上。

 

  PS:若方法的参数名 和 PathVariable中绑定的参数名不一致的时候,需要在@PathVariable(“name”)中指定绑定的参数名,用法如上图所示。

 

@RequestHeader/@CookieValues

@RequestHeaders

@RequestHeader 注解 可以把 request请求中header中的值绑定到 方法的参数上

Header的 示例 如下:


在代码中的应用别无二致,附一张代码图:


@CoookieValue

  @CookieValue可以把header中 的关于cookie的值绑定到方法的参数上,cookie是浏览器自动发送的,例如用户登录之后,开启一个session,登录请求响应的时候会把session  的值自动传送到浏览器端,下次浏览器再次访问的时候会自动携带 cookie的值,也就是之前传递过来的session的值。

  有cookie的header示例:


代码中的使用方法和 之前别无二致,不再上图了。

@RequestParam/@RequestBody

以chrome浏览器 解析的post请求:


@RequestParam

A.     常用来处理简单类型的数据绑定,通过request.getParamter()获取到的string可以直接转换为简单类型 的值(转换的过程是ConversionService配置的转换器来完成的)

B.      用来处理Content-Type为 application/x-www-form-urlencoded 编码的内容,提交方式 可以为 GET\POST

C.      该注解有两个属性,value、required;其中 value用来指定要传入值的id名称,required用来指定参数是否 必须绑定。

示例代码不再上图.

@RequestBody

  该注解通常用来处理Content-Type不是 application/x-www-form-urlencoded 的编码内容,例如application/json、application/xml等

  它是通过HandlerAdapter 配置的HttpMessageConverters来解析 post data body的,然后绑定到响应的bean上的。

  因为配置有FormHttpMessageConverter,所以也可以用来处理application/x-www-urlencoded 的内容的,处理完的结果 放在 一个 MultiValueMap<String,String>,这种情况在  某些 特殊情况下使用,详情请查看FormHttpMessageConverterapi。

@SessionAttributes/@ModelAttribute

@SessionAttributes

   该注解 用来绑定HttpSession中 的 Attribute 对象的值,便于在 方法中 的参数里 使用,该注解有 value 和 types两个属性 ,可以通过名字 和 类型 指定要使用 的attribute 对象。

@ModelAttribute

  该注解有两个用法,一个是 加在 方法上,一个 是 加在 参数 上。

  用于方法 上的时候,通常用来处理 @RequestMapping之前,为请求绑定需要 从后台查询的model。

  用于参数上的时候,用来通过名称的对应,把相应名称的值 绑定到注解的参数bean上,而要绑定 的 值来源于 :

  1.      @SessionAttributes启用 的 attribute对象 上

  2.      @ModelAttribute 用于方法 上的时候 指定的model的对象

  3.      上述两种情况都没有  的时候,new 一个 需要绑定的对象,然后把request中按名称对应的方式 把值绑定到 bean中。

PS :这种方式 实际 上的效果 就是 在调用 @RequestMapping 的方法 之前,为request对象的model里put(“account”:Accout)

 

---------------------------------------------------END--------------------------------------------------------
原创粉丝点击