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

来源:互联网 发布:照片合成软件下载 编辑:程序博客网 时间:2024/06/01 08:05

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:8080Accept      text/html,application/xhtml+xml,aaplication/xml;q=0.9Accept-Language     fr,en-gb;q=0.7,en;q=0.3Accept-Encoding     gzip,defalteAccept-Charset      ISO-8859-1,utf-8;q=0.7,*;q=0.7Keep-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