@RequestMapping:可以将请求映射到具体的Controller的具体方法上。
@RequestMapping既可以定义在类上,又可以定义在方法上。
请求映射的规则是:类上的@RequestMapping.value + 方法上的@RequestMapping.value
注意:如果value的值不以“/”开头,SpringMVC会自动添加上“/”
@RequestMapping的URL映射
1、标准URL映射:
example1:
@RequestMapping("/hello")
或
@RequestMapping(value="/hello")
example2:
@Controller
@RequestMapping("/its")
public class DemoController {
// 标准URL映射
@RequestMapping("/test1")
public ModelAndView test1() {
ModelAndView mv = new ModelAndView("hello");
mv.addObject("msg", "演示@RequestMapping的标准映射");
return mv;
}
}
2、Ant风格的映射
通配符
|
说明
|
?
|
匹配任何单个字符
|
*
|
匹配0个或者任意数量的字符
|
**
|
匹配0个或者多个目录
|
@RequestMapping("/test/*/show")
匹配:
/hello/test/a/show.action
/hello/test/b/show.action
@Controller
@RequestMapping("/its")
public class DemoController {
@RequestMapping("/demo/*/test2")
public ModelAndView test2() {
ModelAndView mv = new ModelAndView("hello");
mv.addObject("msg", "演示@RequestMapping的Ant(*)风格的映射");
return mv;
}
@RequestMapping("/demo/**/test3")
public ModelAndView test3() {
ModelAndView mv = new ModelAndView("hello");
mv.addObject("msg", "演示@RequestMapping的Ant(**)风格的映射");
return mv;
}
}
3、占位符映射
URL中可以通过一个或多个{xxx}占位符映射,通过@PathVariable("xxx")注解绑定到方法的入参中。
example1:
@RequestMapping("/user/{userId}/{username}");
example2:
// @RequestMapping的占位符映射
@RequestMapping(value = "/user/{userId}/{username}")
public ModelAndView test4(@PathVariable("userId") Long userId, @PathVariable("username") String username) {
ModelAndView mv = new ModelAndView("hello");
mv.addObject("msg", "演示@RequestMapping的占位符映射");
mv.addObject("userMsg", "用户id是:" + userId + ",用户名是:" + username);
return mv;
}
注意:@PathVariable("paramName")中的参数名一定要指定,否则在本地eclipse开发时候可以不会出现问题,但是当程序上到生产环境上时,就可能出现问题。
举例:
1.首先取消掉下图中框出来部分前面的勾
2.Java代码:
3.测试浏览器访问的结果:
以上java代码中的写法是错误的,应该给@PathVariable指定入参的名称。
正确的写法:
4、限定请求方法的映射
SpringMVC的请求默认是Get方式请求,如果指定Controller中的方法只能以POST方式请求,那么当使用其它请求方式的时候,就会出现
405报错(
表示请求方式不支持)。
Java代码:
使用浏览器发送请求:
在Http请求中最常用的请求方式是GET和POST,另外还有一些其它的请求方式PUT、DELETE、HEAD...等。
例如:
@RequestMapping(value="/user/{userId}",method=RequestMethod.GET)
或
@RequestMapping(value="/user/{userId}",method={RequestMethod.GET,RequestMethod.POST})
5、限制请求参数
例如:@RequestMapping(value="/query/item",params="itemId")
限定请求参数中必须有要itemId这个参数。
参数的限定规则如下:
params="itemId",请求参数中必须要包含itemId
params="!itemId",请求参数中不能包含itemId
params="itemId != 1",请求参数中必须要包含itemId,但是其值不能为1
params={"itemId","userId"},请求参数中必须要包含itemId和userId两个参数
如果没有传递限定需要传输的参数,那么就会400报错:
@RequestParam:获取请求参数的值