@RequestMapping注解
参数
-
value
-
method
指定访问方式,如果访问方式不匹配,则无法进行访问。
@RequestMapping(value="/testMethod",method=RequestMethod.POST)
public String testMethod() {
System.out.println("tsetMethod");
return SUCCESS;
}
-
params
请求参数的设置。
- params:表示请求必须包含名为param1的请求参数
- !params:表示请求不能包含名为param1的请求参数
- param1!=value1:表示请求包含名为param1的请求参数,但其值不为value1
- {"param1=value1","param2"}:请求必须包含名为param1和param2的两个请求参数,并且param1的值为value1
@RequestMapping(value="/testParams",params= {"username","age!=10"})
public String testParams() {
System.out.println("testParams");
return SUCCESS;
}
这里要求请求必须有username和age两个参数,并且age不为10。
@PathVariable:映射URL占位符到方法中
@RequestMapping("/testPathVariable/{id}")
public String testPathVariable(@PathVariable("id") Integer id){
System.out.println("testPathVariable " + id);
return SUCCESS;
}
会把URL请求中的/testPathVariable后面的值保存到id中,这样我们就可以在方法中使用这个值。
@RequestParam:映射请求参数
@RequestMapping(value="/testRequestParam")
public String tsetRequestParam(@RequestParam(value="username",required=false) String username,@RequestParam(value="age",required=false,defaultValue="0") int age) {
System.out.println("testRequestParam:"+username+"&"+age);
return SUCCESS;
}
通过@RequestParam可以比较快捷地获取到通过get方式访问的请求参数。
例如通过http://localhost:8080/SpingMVCTest1/springmvc/testRequestParam?username=Tom&age=22这个网址访问,我们可以在方法体中轻松获取到username和age的值。
@CookieValue:获取Cookie值
@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue("JSESSIONID") String sessionId) {
System.out.println("testCookieValue:"+sessionId);
return SUCCESS;
}
该注解使用率不高。
可以使用Servlet原生的API作为目标方法的参数
@RequestMapping("/testServlet")
public void testServlet(HttpServletRequest request,HttpServletResponse response,Writer out) throws IOException {
System.out.println("testServlet:"+request+"&"+response);
out.write("hello springmvc");
//return SUCCESS;
}
支持以下各类型:
- HttpServletRequest
- HttpServletResponse
- HttpSession
- java.serurity.Principal
- Locale
- InputStream
- OutputStream
- Reader
- Writer
@RequestMapping()除了可以返回字符串类型,也可以返回ModelAndView类型。其中可以包含视图和模型信息。
@RequestMapping("/tsetModelAndView")
public ModelAndView testModelAndView() {
String viewName=SUCCESS;
ModelAndView modelAndView = new ModelAndView(viewName);
//添加模型数据到ModelAndView中
modelAndView.addObject("time",new Date());
return modelAndView;
}
SpringMVC会把ModelAndView的model中数据放入到request域对象中。
我们可以在页面上借助requestScope来访问该值。
time: ${requestScope.time}
我们也可以通过Map类型的参数来设置request对象中的值。(实际上也可以是Model类型或ModelMap类型)
@RequestMapping("/testMap")
public String testMap(Map<String,Object> map) {
map.put("names", Arrays.asList("Tom","Jerry","Mike"));
return SUCCESS;
}