2 @RequestMapping
1、作用
Spring MVC使用@RequestMapping注解为控制器指定处理的URL请求。
在控制器的类、方法上都可以标注:
- 类:提供初步的请求映射信息。相对于WEB应用的根目录。
- 方法:提供进一步的细分映射信息。相对于类定义处的URL。
DispatcherServlet截获请求后,就通过控制器上@RequestMapping提供的映射信息确定请求所对应的处理方法。
package com.xianhuii; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping("/springmvc") public class RequestMappingTest01 { private static final String SUCCESS = "success"; /** * 1、可以修饰类、方法 * 1.1、类:提供初步的请求映射信息。相对于WEB应用的根目录 * 1.2、方法:提供进一步的细分映射信息。相对于类定义处的URL。 * 2、此时的URL为:/springmvc/testRequestMapping * @return */ @RequestMapping("/testRequestMapping") public String testRequestMapping() { System.out.println("testRequestMapping"); return SUCCESS; } }
2、源码
package org.springframework.web.bind.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.springframework.core.annotation.AliasFor; @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented @Mapping public @interface RequestMapping { String name() default ""; @AliasFor("path") String[] value() default {}; @AliasFor("value") String[] path() default {}; RequestMethod[] method() default {}; String[] params() default {}; String[] headers() default {}; String[] consumes() default {}; String[] produces() default {}; }
3、method
package com.xianhuii; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller @RequestMapping("/springmvc") public class RequestMappingTest01 { private static final String SUCCESS = "success"; /** * 使用method属性来指定请求方式 * @return */ @RequestMapping(value = "/testMethod", method = RequestMethod.POST) public String testMethod() { System.out.println("testMethod"); return SUCCESS; } }
4、params、heads
params:请求参数。
heads:请求头。
param1:表示请求必须包含名为param1的请求参数 !param1:表示请求不能包含名为param1的请求参数 param1 != value1:表示请求包含名为param1的请求参数,但其值不能为value1 {"param1=value1","param2"}:请求参数必须包含名为param1和param2的两个请求参数,且param1参数的值必须为value1
package com.xianhuii; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller @RequestMapping("/springmvc") public class RequestMappingTest01 { private static final String SUCCESS = "success"; /** * 可以使用params、headers来更加精确的映射请求。 * params、headers支持简单的表达式。 * @return */ @RequestMapping(path = "/testParamsAndHeaders", params = {"username=xianhuii","age=18"}) public String testParamsAndHeaders() { System.out.println("testParamsAndHeaders"); return SUCCESS; } }
5、Ant路径
Ant风格资源地址支持3种匹配符:
- ?:匹配文件名中的一个字符。
- *:匹配文件名中的任意字符。
- **:匹配多层路径。
/user/*/createUser:匹配:/user/aaa/createUser、/user/bbb/createUser等URL /url/**/createUser:匹配:/user/createUser、/user/aaa/createUser、/user/aaa/bbb/createUser等URL /user/createUser??:匹配/user/createUseraa、/user/createUserbb等URL
package com.xianhuii; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller @RequestMapping("/springmvc") public class RequestMappingTest01 { private static final String SUCCESS = "success"; @RequestMapping("/testAnt/*/abc") public String testAntPath() { System.out.println("testAntPath"); return SUCCESS; } }