Restful

参数绑定

  • handler method 参数绑定常用的注解,我们根据他们处理的Request的不同内容部分分为四类:

    • A、处理requet uri 部分(这里指uri template中variable,不含queryString部分)的注解: @PathVariable;
    • B、处理request header部分的注解: @RequestHeader, @CookieValue;
    • C、处理request body部分的注解:@RequestParam, @RequestBody;
    • D、处理attribute类型是注解: @SessionAttributes, @ModelAttribute;
  • @RequestParam注解接收的参数来自于reuqestHeader中,即请求头,也就是url中

    @RequestBody注解接收的参数来自于requestBody中,即请求体中

  • 如果为get请求,后台接收参数注解应该为RequestParam,post请求,后台接收参数注解就是RequestBody

@RequestParam

主要用于将请求参数区域的数据映射到控制层方法的参数上

  • 参数

    • value:请求中传入参数的名称,如果不设置后台接口的vaue值,则默认为该变量名

    • required:是否必须传该参数,默认为true。如果不传,会报404错误。如果为false,当请求中没有此参数,会默认为null,对于基本类型变量,必须有值,此时报空指针错误。如果允许空值,则接口变量要用包装类来声明

    • defaultValue:没有同名参数,则默认值为此值,默认值可以使用SpEL表达式

  • 如果请求的参数为多个同名参数,比如:url?userName=zhi&userName=holley

    此时传入的数据格式为“zhi,holley”,即多个数据使用逗号隔开,在后台接口中可以使用数组或List类型的变量来接受,如:@RequestParam(value="userName") String[] userNames@RequestParam(value="list") List<String> list

  • 前端传url?id=1&name=

@RequestBody

该注解用来处理Content-Type为application/json, application/xml等内容

@PathVariable

接受请求路径中占位符的值,参数值需要在url中进行占位

前端传url=url/{id}/{name}

后端为@PathVariable long id,@PathVariable String name

如果方法参数名称和需要绑定的uri tempate中的变量名称不一样,则需要在@PathVariable(“name”)指定uri template名称

@RequestHeader

可以把Request请求header部分的值绑定到方法的参数上

这是一个Request的header部分

Host                    localhost:8080
Accept                  text/html,application/xhtml+xml,application/xml;q=0.9
Accept-Language         fr,en-gb;q=0.7,en;q=0.3
Accept-Encoding         gzip,deflate
Accept-Charset          ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive              300

@RequestHeader(Accept-Encoding) String encoding

@CookieValue

可以把Request header中关于cookie的值绑定到方法的参数上

例如有以下Cookie值

JSESSIONID=415A4AC178C59DACE0B2C9CA727CDD84

@CookieValue("JSESSIONID") String cookie

@SessionAttributes

该注解用来绑定HttpSession中的attribute对象的值,便于在方法的参数里使用

该注解有vaue、types两个属性,可以通过名字和类型来指定要使用的attribute对象

  • 若希望多个请求之间共用数据,则可以在控制器上标注一个@SessionAttributes,配置需要在session中存放的数据范围,
  • @SessionAttributes只能使用在类定义上,一般作用于处理器类上,用于在多个请求之间传递参数,类似于Session的Attribute,但不完全一样,一般来说@SessionAttributes设置的参数只用于暂时的传递,而不是长久的保存,长期保存的数据还是放到Session中
  • 除了可以通过属性名指定需要放在会话中的属性外,还可以通过模型属性的对象类型指定哪些模型属性需要放在会话中
  • value和type是交集关系

@ModelAttribute

该注解有两个用法,一个是用于方法上,一个是用于参数上;

  • 用于方法上时: 通常用来在处理@RequestMapping之前,为请求绑定需要从后台查询的model;
// Add one attribute
// The return value of the method is added to the model under the name "account"
// You can customize the name via @ModelAttribute("myAccount")
 
@ModelAttribute
public Account addAccount(@RequestParam String number) {
    return accountManager.findAccount(number);
}

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

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

A) @SessionAttributes 启用的attribute 对象上;

B) @ModelAttribute 用于方法上时指定的model对象;

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

@RequestMapping(value="/owners/{ownerId}/pets/{petId}/edit", method = RequestMethod.POST)
public String processSubmit(@ModelAttribute Pet pet) {
   
}

首先查询 @SessionAttributes有无绑定的Pet对象,若没有则查询@ModelAttribute方法层面上是否绑定了Pet对象,若没有则将URI template中的值按对应的名称绑定到Pet对象的各属性上。

地址映射

@RequestMethod

RequestMethod是一个用来处理请求地址映射的注解,可用于类或方法上,用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径

  • 属性说明

    • value:指定请求的实际地址,指定的地址可以是URI Template模式

      普通具体值、含有某变量的一类值、含正则表达式的一类值

    • method:指定请求的method类型,GET、POST、PUT、DELETE

    • consumes:指定处理请求的提交内容类型,例如application/json,text/html

    • produces:指定返回的内容类型,仅当request请求头中的Accept类型中包含该指定类型才返回

    • params:指定request中必须包含某些参数值,才让该方法处理

      @RequestMapping(value="/{petId}",method=RequestMethod.GET,params="myParam=myValue")

      仅处理请求中包含了名为“myParam”,值为“myValue”的请求

    • headers:指定request中必须包含某些指定的header值,才让该方法处理

      @RequestMapping(value="/spets",method=RequestMethod.GET,headers="Referer=http://url")

      仅处理request的header中包含了指定"Refer"请求头和对应值为”http://url“的请求

Session和cookie

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值