SpringMVC的常用注解
1、@Controller
@Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。
2、@RequestMapping
用于处理请求 url 映射的注解,可用于类或方法上。
使用在类上: 请求 URL 的第一级访问目录。此处不写的话,就相当于应用的根目录
使用在方法上: 请求 URL 的第二级访问目录
属性:
1、name:相当于方法的注释,使方法更易理解
2、value:指定请求的实际地址
3、path:与value同义,两者都是用来作为映射使用的
4、method:指定请求的method类型, GET、POST、PUT、DELETE等
5、params:该属性指定,请求中必须包含params属性规定的参数时,才能执行该请求
6、headers:该属性指定,请求中必须包含某些指定的header值,才能够让该方法处理请求
7、consumes:指定处理请求的提交内容类型(Content-Type),例如:application/json、text/html时,才能够让该方法处理请求
8、produces:指定返回的内容类型,返回的内容类型必须是request请求头(Accept)中所包含的类型,此外,produces属性还可以指定返回值的编码
3、@Resource和@Autowired
@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。
相同点:
两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。
不同点:
@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。
@Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。
@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。
如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。
4、@RequestParam
把请求中指定名称的参数给控制器中的形参赋值。
属性:
1、value:请求参数中的名称。
2、required:请求参数中是否必须提供此参数。 默认值:true。 表示必须提供,如果不提供将报错。
3、defaultValue:默认值
使用场景:
1、@RequestParam 只能用于接收 url 的传参?name=xxx
2、form表单的提交
例:
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam(value = "name",required = true,defaultValue = "李四") String username){
System.out.println("username="+username);
return "success";
}
5、@RequestBody
- 用于获取请求体内容。 直接使用得到是 key=value&key=value…结构的字符串。
- 把获得json类型的数据转成pojo对象。
属性:
required:是否必须有请求体。默认值是:true。当取值为 true 时,get 请求方式会报错。如果取值为 false, get 请求得到是 null。
注:@RequestBody 不能使用get请求, 在Controller的方法参数里,有且只有一个
6、@ResponseBody
@ResponseBody用于将 Controller 的方法返回的对象,通过 HttpMessageConverter 接口转换为指定格式的数据如: json,xml 等,通过 Response 响应给客户端
使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)
用法:
- 在Controller类: 代表该Controller类中所有的方法都使用@ResponseBody,即都直接返回对象数据
- 在Controller类的方法上: 将该方法的返回值转成json对象返回给客户端
7、@ PathVariable
用于绑定 url 中的占位符。 例如:请求 url 中 /delete/{id}, 这个{id}就是 url 占位符。
url 支持占位符是 spring3.0 之后加入的。是 springmvc 支持 rest 风格 URL 的一个重要标志。
属性:
1、value:用于指定 url 中占位符名称。
2、required:是否必须提供占位符。
使用场景:
获取路径中的参数
例:
@RequestMapping("testPathVaribale/{id}")
public String testPathVaribale(@PathVariable(value = "id") Integer id){
System.out.println("id="+id);
return "success";
}
8、@RequestHeader
用于获取请求消息头。
属性:
1、value:提供消息头名称
2、required:是否必须有此消息头
使用场景:
从请求头中获取参数,鉴权(token) Authorization
9、@CookieValue
用于把指定 cookie 名称的值传入控制器方法参数。
属性:
1、value:指定 cookie 的名称。
2、required:是否必须有此 cookie。
使用场景:
/**
* 获取 Session
* JSESSIONID=412A032E02A2594698F6E3F4458B9CE6
*/
@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue("JSESSIONID") String sessionId) {
System.out.println("JSESSIONID = " + sessionId);
return "success";
}
10、@ModelAttribute
代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法,可用于注解和方法参数中,可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。
在 Controller 中使用 @ModelAttribute 时,有以下几种应用情况。
1、应用在方法上
2、应用在方法的参数上
3、应用在方法上,并且方法也使用了 @RequestMapping