本文只说常用注解,不说怎么配置:
1 @Controller
在SpringMVC中,@Controller用于标记一个类,将其注册到Spring上下文, 负责处理由DispatcherServlet分发的请求,并将处理结果封装成一个Model返回给View进行展示。
2 @RequestMapping
@RequestMapping是将请求url映射到处理逻辑上,可用于类或方法上,该注解有六个属性:
value:指定请求的url;
method:指定请求的method类型, GET、POST等;
consumes:指定处理请求的提交内容类型(Content-Type),如application/json;
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
params: 指定request中必须包含某些参数值是,才让该方法处理;
headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求
@RequestMapping(“/mvc/?/getView”) 支持多种匹配符:
?:匹配文件名的一个字符,
*:匹配文件名的所有字符
**:匹配多层路径
@Controller //控制器,类似于struts的Action @RequestMapping("/mvc/*") // 父request请求url public class FirstController { @RequestMapping("/getView") public String getView(){ return "home"; }
@RequestMapping 标记的处理器方法,可以直接在方法上给定HttpServlet 对象的参数申明(主要包括HttpServletRequest 、HttpServletResponse 和HttpSession),然后在方法体里面直接使用。
3 @RequestParam
@RequestParam 主要功能是辅助控制层获取到请求中的业务参数,其形式为public String getName(@RequestParam("id") String userId),另外,@RequestParam能够将请求中的参数转换成函数定义中的形参形式。
@RequestParam 通过Request.getParameter() 获取到的String可直接转换为简单类型,所能处理的Content-Type 为 application/x-www-form-urlencoded编码的内容,提交方式GET、POST;
4 @PathVariable
@PathVariable 将请求URL中的模板变量映射到方法参数上,即具备从URL中获取动态参数的能力,参数名称不一致时可参看如下方式:
@RequestMapping(value = "/getAddressByName/{name}", method = RequestMethod.POST) @ResponseBody public String getAddressByName(@PathVariable("name") String userName){ if (userName.equalsIgnoreCase("zhangsan")) { return "shanghai"; } else { return "anhui"; } }
5 @RequestBody、@ResponseBody
@RequestBody 功能是读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,将数据转换到形参指定的类型上,与@RequestParam不同,该注解处理的是 非application/x-www-form-urlencoded编码的内容。
@ResponseBody 将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
@RequestMapping("/setPerson") @ResponseBody public Person setPerson(@RequestBody Person person) { System.out.println(JSON.toJSONString(person)); person.setName("zhangsan"); person.setSex("female"); person.setAddress("上海"); return person; }
6 @RequestHeader、@CookieValue
@RequestHeader 可以将请求Request中的header部分绑定到方法形参上;
@CookieValue 可以把Request header中关于cookie的值绑定到方法的参数上;
@RequestMapping(value = "/getHeaderAndCookie", method = RequestMethod.POST) @ResponseBody public String getHeaderAndCookie(@RequestHeader("Host") String header, @CookieValue("name") String cookie) { return "header:" + header + ", cookie:" + cookie; }
7 @ModelAttribute
SpringMVC 使用@ModelAttribute 在不同方法之间通过Model来共享数据,主要有两种使用方式,一种是标注在方法上,一种是标注在 Controller 方法参数上:
@ModelAttribute作用在方法上时,表明该方法会向Model添加一个属性,在当前Controller各方法之间共享,并且会在该Controller的所有@RequestMapping标注的方法执行前调用;
@ModelAttribute作用在方法参数上时,表明该参数可以在Model中检索到,并提取属性值注入到自定义的方法形参上;
注:@ModelAttribute标记的方法会在每个@RequestMapping标记的方法执行前调用,因此需要谨慎使用。
@Controller public class MyController { @ModelAttribute("stringValue") public String setName(){ System.out.println("执行 setName 方法"); return "zhangsan"; } @ModelAttribute("userAge") public int setAge(){ System.out.println("执行 setAge 方法"); return 10; } @RequestMapping(value = "/getAge", method = RequestMethod.GET) public void getAge(@ModelAttribute("stringValue") String name, @ModelAttribute("userAge") int age){ System.out.println("name:" + name + ", age:" + age); } }
执行结果为:
执行 setName 方法 执行 setAge 方法 name:zhangsan, age:10
8 @SessionAttributes
@SessionAttributes 只能标记在Controller类上,指明将Model中的哪些属性是放到session中,可用于在多个请求之间传递参数
还没有评论,来说两句吧...