SpringMVC的常用注解
1.@Controller
标注在一个类上,表示该Java类是controller控制层,负责处理由DispatcherServlet 分发的请求。
在SpringMVC中,@Controller通常与@RequestMapping搭配使用。
注意:单单使用@Controller注解标注在类上并没有什么作用,需要让Spring认识它。有两种方式:
1)在SpringMVC的配置文件中装配该controller类的bean对象。
2)在SpringMVC的配置文件中告诉Spring该去哪里找标有@Controller注解的controller类。
<!--方式1:将HelloController对象装配到Spring容器中-->
<bean id="helloController" class="com.zm.controller.HelloController"></bean>
<!--方式2:告诉Spring该去哪里找标有注解为@Controller的controller类。-->
<context:component-scan base-package="com.zm.controller"></context:component-scan>
2.@RequestMapping
作用:@RequestMapping可以用来处理请求地址的映射。
2.1@RequestMapping注解的常用属性:
1)value,method
value:指定请求的实际地址。该属性默认是省略的,但是当有其他属性需要设置时,value不可省略
method:指定请求的method类型(get、post、put、delete)。
2)consumes、produces
consumes:指定请求的提交内容类型(Context-Type)。如:application/json。
produces:指定响应的内容类型。仅当request请求头中的(Accept)类型中包含该指定类型才返回。
3)header、params
header:指定request中必须包含指定的header值,才能让该方法处理请求。
params:指定request中必须包含某些参数值时,才让该方法处理。
2.2 @RequestMapping的位置
可以加在类上或者方法上;或者同时加载这两个位置上;最终的路径是这两个位置的路径的组合。
2.3 @RequestMapping的请求方式
get、post、put、delete
注意:如果不指定method,可以接受任何类型的请求;如果请求方式不正确,会报告405的错误。
2.4 @RequestMapping中请求参数和请求头表达式的设置
通过表达式精确映射请求
params和header支持简单的表达式:
1、param1:表示请求中必须包含名为param1的请求参数;
2、param1 != value1:表示请求中包含请求名为param1的请求参数,但其值不能为value1;
3、{“param1=value1”,“param2”}:表示请求中包含请求名为param1和param2的请求参数,其中请求名为param1的值必须为value1。
2.5 ant风格的路径
ant风格的资源地址支持三种匹配符:
1)?:匹配文件名中的一个字符
2)*:匹配文件名中的任意字符
3)**:匹配多层路径
@RequestMapping支持ant风格的url。
3.@RequestParam
1)作用:常用来处理简单类型的绑定。
2)该注解有三个属性:
value:指定要传入的值的名称;required:表示参数是否可选。默认值为true;defaultValue:设置参数的默认值。
3)使用
>自动的参数匹配(post/get)
表单中空间name属性的值与controller中方法的参数名一致,则可以自动匹配。
>通过@RequestParam注解匹配参数(post/get)
>url路径的参数匹配(get)
…/user/list?currentPage=1&pageSize=10
/*url地址参数匹配
* @param currentPage 当前页
* @param page 每页的记录数
* */
@RequestMapping(value = "/list",method = RequestMethod.GET)
public String listUrl(Integer currentPage,Integer pageSize){
System.out.println("listUrl……");
System.out.println("currentPage:"+currentPage);
System.out.println("pageSize:"+pageSize);
return "list";
}
controoler层的方法中,参数列表名与url中所带的参数名一致,可自动匹配获取url中的参数值。
currentPage——》Integer currentPage;pageSize——》Integer pageSize
>使用defaultValue属性设置参数的默认值
>使用reqired属性设置参数是否可选
注意:当参数是基本类型时,若request属性的值是true,参数为空值时,会报400( Required int parameter ‘currentPage’ is not present)的错误;若request属性的值是false,参数为空值时,会报500(Optional int parameter ‘currentPage’ is not present but cannot be translated into a null value due to being declared as a primitive type)的错误,表示不能将不存在的值转换为null。
>>controller中的参数为基本类型时,必须将类型写为它所对应的包装类类型,以避免不必要的错误!
4.@PathVariable
作用:将 URL 中占位符参数绑定到控制器处理方法的入参中,以获取占位符中所传递的参数。
5.@CookieValue
作用:获取cookie中的值。
6.@RequestHeader
作用:获取请求头中的信息。
7.@SessionAttributes
1)作用:对session进行管理,在多个请求之间共享数据。它可以定义在类或者接口上。
2)相关属性:
value:通过属性名指定需要放到会话中的属性;types:指定哪些类型需要放到会话中。例如:@SessionAttributes(value={“user1”,“user2”},types={Dept.class}) 将model中属性名为user1和user2以及类型为Dept的属性添加到会话中。
types与value之间是并集的关系。
需要注意的问题:
@SessionAttributes需要清除时,使用SessionStatus.setComplete();来清除。但是,它只清除@SessionAttributes的session,不会清除HttpSession的数据。