Spring mvc中Controller参数绑定注解详解

Spring mvc中Controller参数绑定注解详解

简介

Request Method参数常用的注解,我们根据他们处理的Request不同部分分为4类:

  1. 处理Request Uri(这里指的是Uri template中的Variable,不包含QuertString部分):@PathVariable
  2. 处理Request Header:@RequestHeader,@CookieValue
  3. 处理Request Body: @RequestParam,@RequestBody
  4. 处理Attribute类型:@SessionAttributes,@ModelAttribute;

1.@PathVariable

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

@Controller
@RequestMapping("/student/{studentId}")
public ResponseEntity<List<Students>> queryStudentById(@Paramvariable String studentId){
    return new ReponseEntity<>(studentService.queryStudentById(studentId),HttpStatus.Ok)
}

2.@RequestHeader、@CookieValue

@RequestHeader注解,可以把Request请求header部分的值绑定到方法的参数上。

这时一个Request的Header部分:

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

使用@RequestHeader注解的Java片段:将Request header部分的Accept-Encoding和Keep-Alive的值分别绑定在encoding和keepAlive上。

@RequestMapping("displayHeaderInfo.do")
public void displayHeaderInfo(@RequestHeader("Accept-Encoding") String encoding,@RequestHeader("Keep-Alive") long keepAlive){
    //...
}

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

例如有这样的Cookie值

JSESSIONID=415AAC78C59DACE0B842

使用@CookieValue绑定制定Cookie值的Java代码:将JSESSIONID的值绑定到了参数cookie 上

@Requestmapping("displayHeaderInfo.do")
public void displayHeaderInfo(@CookieValue("JSESSIONID") String cookie){
    //...
}

3.@RequestParam、@RequestBody

@RequestParam使用分为2种情况:第一种为常用情况
1. 处理简单类型的绑定:通过Request.getParamter()获取的String的值可直接转换为简单类型String的情况。使用Request.getParamter()的方式获取参数,可以处理get方式中的queeryString的值,也可以处理post方式中的body data的值;
2. 处理Content-Type:为application/s-www-form-urlencoded编码的内容,提交方式GET、POST;

@RequestParam有两个参数:value(用来指定要传入值的id名称)、required(用来指明参数是否必须绑定)

下面是使用@RequestParam的java代码片段:

@RequestMapping(value="/teacher",method=RequestMethod.GET,produces="application/json")
public ResponseEntity<List<Teacher>> queryByIdAndType(@RequestParam String id,@RequestParam int type){
    return new ResponseEntity<>(teacherService.queryByIdAndType(id,type),HttpStatus.OK);
}

@RequestBody:常用来处理Content-Type,但并不是application/x-www-form-urlended编码的内容虽然可以处理它,例如application/json,application/xml等。

使用@RequestBody的代码

@RequestMapping(value="/something",method=RequestMethod.PUT)
public void handle(@RequestBody String body,Writer writer)throws IOException{
 writer.write(body);
}

4.@SeesionAttributes、@ModelAttribute

@SessionAttributes:用来绑定HttpSession中的attribute对象的值,便于在方法中的参数里使用;拥有两个属性valuetypes,可以通过名字和类型指定要使用的attribute对象

@Controller
@RequestMapping("/editPet.do")
@SessionAttributes("pet")
public class EditPetForm{
    @RequestMapping(method=RequestMethod.GET)
    public String setupForm(Model model){
        Pet pet=new Pet(1);
        model.addAttribute("pet",pet)
    }
}

@ModelAttribute:
参考博客:
* http://hbiao68.iteye.com/blog/1948380
* http://blog.csdn.net/li_xiao_ming/article/details/8349115

参考文档:
http://blog.csdn.net/walkerjong/article/details/7946109

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值