springmvc @RequestMapping映射请求

来源:互联网 发布:道教地狱知乎 编辑:程序博客网 时间:2024/05/21 21:58

springmvc 使用@RequestMapping来拦截路径,将路径拦截到某个controller某个方法进行具体处理,@RequestMapping可以在类级别上注解以及方法级别上注解

@Controller@RequestMapping("/task")public class TaskController {   @RequestMapping(value = { "", "/" })    public String whatPage() {        return "task/task" ;    }  @RequestMapping("/mvcTest1")  public void  mvcTest1(            HttpServletRequest req,            HttpServletResponse res,            @CookieValue("JSESSIONID") String sessionId,            @RequestParam(value = "param", required = false) String param,            @RequestHeader(value = "Accept-Encoding", required = false) String encoding,             @DateTimeFormat(pattern = "yyyy-MM-dd hh:mm:ss") Date date ,            Integer type,            @Validated Task task ) {    }}

看看@RequestMapping注解源码

@Target({ElementType.METHOD, ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Mappingpublic @interface RequestMapping {    String[] value() default {};    RequestMethod[] method() default {};    String[] params() default {};    String[] headers() default {};    String[] consumes() default {};    String[] produces() default {};}

拦截多个路径

@RequestMapping不写具体key时候,默认是按key为value拦截且拦截一个,如果你想拦截多个路径,可以这样子配置

 @RequestMapping(value = { "", "/" }) public String whatPage() {    return "task/task" ; }

利用{…}匹配变量,利用@PathVariable 可以将变量绑定在方法入参中获取

 @RequestMapping("/pets/{petId}") public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {        // ...    }

利用正则表达式来匹配路径,语法为{varName:regex},varName是变量,regex是具体的正则匹配,可以用@PathVariable将varName绑定在方法入参中,然后获取,例如下面的例子这样子请求”/spring-web/spring-web-3.0.5.jar”

@RequestMapping("/spring-web/{symbolicName:[a-z-]}-{version:\\d\\.\\d\\.\\d}{extension:\\.[a-z]}")public void handle(@PathVariable String version, @PathVariable String extension) {        // ...}

支持Ant的rest风格

/**  *匹配如/task/aaa/saveTask,/task/bbb/saveTask  */@RequestMapping("/task/*/saveTask")public void saveTask1() {        // ...}/**  *匹配如/task/aaa/bbb/saveTask,/task/aaa/bbb/ccc/saveTask  */@RequestMapping("/task/**/saveTasks")public void saveTask2() {        // ...}/**  *匹配如/task/saveTask1,/task/saveTask2  */@RequestMapping("/task/saveTasks??")public void saveTask3() {        // ...}

Ant的rest风格和{…}模式混合匹配

@RequestMapping("/task/**/findTaskById/{taskId}")public void saveTask4(@PathVariable Long taskId ) {        // ...}

后缀模式匹配

/**  * 获取任务栏  */@RequestMapping("/findTaskList")public void findTaskList(@PathVariable Long taskId ) {        // ...}

springmvc在配置”/findTaskList”这样子的路径时,如果用户路径是”/findTaskList/”,”/findTaskList.xml”,”/findTaskList.json”都会进入到findTaskList方法中。可以在配置文件中配置后缀

<!-- 注解驱动 -->    <mvc:annotation-driven >         <mvc:path-matching suffix-pattern="false" trailing-slash="false" />    </mvc:annotation-driven>

suffix-pattern匹配后缀,如.xml,.json默认是true,trailing-slash匹配”/”,如“/findTaskList/”默认是true。

矩阵匹配,可以匹配 URI RFC 398 标准的路径,如/cars;color=red;year=2012”的key和value类型的路径,需要在配置中打开矩阵请求允许

// GET /pets/42;q=11;r=22@RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET)public void findPet(@PathVariable String petId, @MatrixVariable int q) {    // petId == 42    // q == 11}//在dispatch-content.xml配置打开允许矩阵请求格式<mvc:annotation-driven enable-matrix-variables="true"></mvc:annotation-driven>

其他参数匹配,method ,params,headers,consumes,produces

匹配method ,能按照请求方法匹配,如POST,GET,PUT等

@RequestMapping(value = "/saveTask", params = RequestMethod.POST)public void saveTask(Task task) {    // ...}

用params匹配具体的参数,以key=value或者key!=value存在

@RequestMapping(value = "/findTaskByTaskName", params="taskName = mytask")public void findTaskByTaskName(String taskName) {    // ...}@RequestMapping(value = "/findTaskByTaskName", params="taskName != mytask")public void findTaskByTaskName(String taskName) {    // ...}

用headers匹配请求的头部信息,以key = value或者key != value存在

@RequestMapping(value = "/findTaskByTaskName", headers="Accept-Charset=iso-8859-1")public void findTaskByTaskName(String taskName) {    // ...}

用consumes匹配请求头部的Content-Type

@RequestMapping(value = "/findTaskByTaskName", consumes="application/json")public void findTaskByTaskName(String taskName) {    // ...}

用produces匹配请求头部的accpet

@RequestMapping(value = "/findTaskByTaskName", produces="application/json")public void findTaskByTaskName(String taskName) {    // ...}
0 0
原创粉丝点击