@RequestMapping映射请求

 1、SpringMVC使用@RequestMapping注解为控制器指定可以处理哪些URL请求。
 
2、在控制器的类定义和方法定义处都可标注@RequestMapping
 
2.1 类定义处:提供初步的请求映射信息。相对于WEB应用的根目录
2.2 方法处:提供进一步的细分映射信息。相对于类定义处的URL。
 
3、DispatcherServlet截获请求后,就通过控制器上@RequestMapping提供的映射信息确定请求所对应的处理方法。
 
4. @RequestMapping请求URL(value)、请求方法(method)、请求参数(params)、请求头映射(headers)、consumes,produces
 
--param1:参数必须包含param1
--!param1:参数不能包含param
--param1!=value1:必须包含param,并且值不等于value1
--{“param1=value1”,“param2”}:必须包含param1和param2,并且param1的值等于value1

5. Ant风格资源地址支持3中匹配符:

-  ?:匹配文件名中的一个字符;
/user/???User匹配:   /user/addUser  /user/edtUser

-  *:匹配文件名中的任意字符;
/user/*/addUser匹配:/user/my/addUser    /user/system/addUser

-- **:匹配多层路径 
/user/** /addUser匹配:/user/addUser  /user/system/my/addUser

6.带占位符的URL是Spring3.0新增的功能 

通过@PathVariable可以将URL中占位符参数绑定到控制器处理方法的入参中 
 
@RequestMapping("/delete/{id}")
public String delete(@PathVariable("id") Integer id){
           userDao.delete(id);
           return "redirect:/user/list.do";
 
7.RequestMapping注解
 

RequestMapping注解有六个属性,下面我们把她分成三类进行说明。

i、 value, method;

value:     指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);

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

ii、 consumes,produces;

consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

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

iii、 params,headers;

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

headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。
示例:

value的uri值为以下三类:

A) 可以指定为普通的具体值;

B)  可以指定为含有某变量的一类值(URI Template Patterns with Path Variables);

C) 可以指定为含正则表达式的一类值( URI Template Patterns with Regular Expressions);

example B)

 
  1. @RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET)  
  2. public String findOwner(@PathVariable String ownerId, Model model) {  
  3.   Owner owner = ownerService.findOwner(ownerId);    
  4.   model.addAttribute("owner", owner);    
  5.   return "displayOwner";   

example C)
 2 consumes、produces 示例

cousumes的样例:

    1. @Controller  
    2. @RequestMapping(value = "/pets", method = RequestMethod.POST, consumes="application/json")  
    3. public void addPet(@RequestBody Pet pet, Model model) {      
    4. // implementation omitted  
    5. }  
    方法仅处理request Content-Type为“application/json”类型的请求。

    produces的样例:

    1. @Controller  
    2. @RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET, produces="application/json")  
    3. @ResponseBody  
    4. public Pet getPet(@PathVariable String petId, Model model) {      
    5. // implementation omitted  
    6. }  

    方法仅处理request请求中Accept头中包含了"application/json"的请求,同时暗示了返回的内容类型为application/json;

     

    3 params、headers 示例

    params的样例:

    1. @Controller  
    2. @RequestMapping("/owners/{ownerId}")  
    3. public class RelativePathUriTemplateController {  
    4. @RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET, params="myParam=myValue")  
    5. public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {      
    6. // implementation omitted  
    7.   }  
    8. }  

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

     

    headers的样例:

    1. @Controller  
    2. @RequestMapping("/owners/{ownerId}")  
    3. public class RelativePathUriTemplateController {  
    4. @RequestMapping(value = "/pets", method = RequestMethod.GET, headers="Referer=http://www.ifeng.com/")  
    5. public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {      
    6. // implementation omitted  
    7.   }  
    8. }  

     仅处理request的header中包含了指定“Refer”请求头和对应值为“http://www.ifeng.com/”的请求;

     

     

posted @ 2016-09-23 13:44  esther-qing  阅读(718)  评论(1编辑  收藏  举报