springmvc4 handler(acion)方法的@RequestMapping详细配置 spring4技术
最基础的requestMapping配置说明及各个参数方式的举例, 此参数不仅可以修饰action也可以修饰其方法
这里只介绍配置在方法上的形式。
1 最基础的mapping配置
//http://xxxxxx/project_name/actionRequestMapping
@RequestMapping("/actonRequestMapping")
public String testRequestMapping() {
System.out.println("RequestMapping");
return SUCCESS;
}
2
/**
form 以POST形式来请求
* method 属性来指定请求方式
*/
@RequestMapping(value = "/actonMethod", method = RequestMethod.POST)
public String testMethod() {
System.out.println("Method");
return SUCCESS;
}
3
/**
* 可以使用 params 和 headers 来更加精确的映射请求. params 和 headers 支持简单的表达式.
* 表示 : 必须有 username age 这两个属性提交,且age属性不能为10; 限定header参数 Accept-Language
必须是 en-US,zh;q=0.8
* @return
*/
@RequestMapping(value = "ParamsAndHeaders", params = { "username",
"age!=10" }, headers = { "Accept-Language=en-US,zh;q=0.8" })
public String testParamsAndHeaders() {
System.out.println("ParamsAndHeaders");
return SUCCESS;
}
4 通配符匹配
*可以表示 所有字符 /actionAntPath/sss[ffff][...]/abc
@RequestMapping("/actonAntPath/*/abc")
public String testAntPath() {
System.out.println("AntPath");
return SUCCESS;
}
5 pathParam 映射到URL里
/**
* @PathVariable 可以来映射 URL 中的占位符到目标方法的参数中.
* @param id
* @return
*/
@RequestMapping("/actonPathVariable/{id}")
public String testPathVariable(@PathVariable("id") Integer id) {
System.out.println("PathVariable: " + id);
return SUCCESS;
}
6 rest 风格请求实现 Rest 风格的 URL. 以 CRUD 为例
/** start
* : 新增: /order POST 修改: /order/1 PUT update?id=1 获取:
* /order/1 GET get?id=1 删除: /order/1 DELETE delete?id=1
*
* 如何发送 PUT 请求和 DELETE 请求呢 ?
1. 需要配置 HiddenHttpMethodFilter
web.xml 添加请求转换配置:
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2. 需要发送 POST 请求
* 3. 需要在发送 POST 请求时携带一个 name="_method" 的隐藏域, 值为 DELETE 或 PUT
*
* 在 SpringMVC 的目标方法中如何得到 id 呢? 使用 @PathVariable 注解
*
*/
@RequestMapping(value = "/actonRest/{id}", method = RequestMethod.PUT)
public String testRestPut(@PathVariable Integer id) {
System.out.println("Rest Put: " + id);
return SUCCESS;
}
@RequestMapping(value = "/actonRest/{id}", method = RequestMethod.DELETE)
public String testRestDelete(@PathVariable Integer id) {
System.out.println("Rest Delete: " + id);
return SUCCESS;
}
@RequestMapping(value = "/actonRest", method = RequestMethod.POST)
public String testRest() {
System.out.println("Rest POST");
return SUCCESS;
}
@RequestMapping(value = "/actonRest/{id}", method = RequestMethod.GET)
public String testRest(@PathVariable Integer id) {
System.out.println("Rest GET: " + id);
return SUCCESS;
}
//end
7 方法签名的各种处理
/**
* @RequestParam 来映射请求参数. value 值即请求参数的参数名 required 该参数是否必须. 默认为 true
* defaultValue 请求参数的默认值
*/
@RequestMapping(value = "/actonRequestParam")
public String testRequestParam(
@RequestParam(value = "name") String un,
@RequestParam(value = "age", required = false, defaultValue = "0") int age) {
System.out.println("RequestParam, name: " + un + ", age: "
+ age);
return SUCCESS;
}
8 header 参数注入方法签名
@RequestMapping("/actonRequestHeader")
public String testRequestHeader(
@RequestHeader(value = "Accept-Language") String al) {
System.out.println("RequestHeader, Accept-Language: " + al);
return SUCCESS;
}
@RequestMapping("/actonCookieValue")
public String testCookieValue(@CookieValue("JSESSIONID") String sessionId) {
System.out.println("CookieValue: sessionId: " + sessionId);
return SUCCESS;
}
9
/**
* Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配, 自动为该对象填充属性值。支持级联属性。
* 如:dept.deptId、dept.address.tel
*/
@RequestMapping("/actonPojo")
public String testPojo(User user) {
System.out.println("Pojo: " + user);
return SUCCESS;
}
10 servletAPI注入方法签名
/**
* 可以使用 Serlvet 原生的 API 作为目标方法的参数 *
* HttpServletRequest
* HttpServletResponse
* HttpSession
* java.security.Principal
* Locale InputStream
* OutputStream
* Reader
* Writer
*/
@RequestMapping("/actonServletAPI")
public void testServletAPI(HttpServletRequest request,
HttpServletResponse response, Writer out) throws IOException {
System.out.println("ServletAPI, " + request + ", " + response);
out.write("hello springmvc");
// return SUCCESS;
}
11 封装modelandview
/**
* 目标方法的返回值可以是 ModelAndView 类型。
* 其中可以包含视图和模型信息
* SpringMVC 会把 ModelAndView 的 model 中数据放入到 request 域对象中.
* @return
*/
@RequestMapping("/actonModelAndView")
public ModelAndView testModelAndView(){
String viewName = SUCCESS;
ModelAndView modelAndView = new ModelAndView(viewName);
//添加模型数据到 ModelAndView 中.
modelAndView.addObject("time", new Date());
return modelAndView;
}
12 作用于内存储数据
/**
* 目标方法可以添加 Map 类型(实际上也可以是 Model 类型或 ModelMap 类型)的参数.
* @param map
* @return
*/
@RequestMapping("/actonMap")
public String testMap(Map<String, Object> map){
System.out.println(map.getClass().getName());
map.put("names", Arrays.asList("Tom", "Jerry", "Mike"));
return SUCCESS;
}
/**
* @SessionAttributes 除了可以通过属性名指定需要放到会话中的属性外(实际上使用的是 value 属性值),
* 还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中(实际上使用的是 types 属性值)
* 类修饰说明:
@SessionAttributes(value={"user"}, types={String.class})
@Controller
public class SpringMVCTest{}
* 注意: 该注解只能放在类的上面. 而不能修饰放方法.
*/
@RequestMapping("/actonSessionAttributes")
public String testSessionAttributes(Map<String, Object> map){
User user = new User("Tom", "123456", "tom@atguigu.com", 15);
map.put("user", user);
map.put("school", "atguigu");
return SUCCESS;
}
13 跳转方法
@RequestMapping("/actonRedirect")
public String testRedirect(){
System.out.println("Redirect");
return "redirect:/index.jsp";
}
说明信息: 以上基本就是 在action里方法签名 及 requestMapping的编写规则 。
如有疑问 请留言 欢迎提供建议
评论已有 0 条