Request
请求参数
- SpringMVC将传递的参数封装到处理器方法的形参中,达到快速访问参数的目的.
@RequestMapping("/requestParam")
public String requestParam(String name){
System.out.println("name="+name);
return "page.jsp";
}
访问URL:http://localhost/requestParam?name=zhangsan
请求参数类型
- 普通类型参数(Srring,int…)
- POJO类型参数(bean对象)
- 数组类型参数
- 集合类型参数
普通类型参数
- 参数名与处理器方法形参名保持一致
@RequestMapping("/requestParam1")
public String requestParam1(String name ,String age){
System.out.println("name="+name+",age="+age);
return "page.jsp";
}
访问URL:http://localhost/requestParam1?name=zhangsan&age=14
参数设定
- 名称:@RequestParam
- 类型:形参注解
- 位置:处理器类中的方法形参前方
- 作用:绑定请求参数与对应处理方法形参间的关系
- 范例:
- 访问路径:/requestRaram2/userName=zhangsan
POJO类型参数
- 当POJO中石油简单类型属性时,参数名称与POJO类属性名保持一致
参数冲突
- 但POJO类型属性与其他形参出现同名问题时,将被同时赋值
- 建议使用@RequestParam注解进行区分
复杂POJO类型参数
-
当POJO中出现对象属性时,参数名称与对象层次结构名称保持一致
-
当POJO中出现集合,保存简单数据,使用多个相同名称的参数为其赋值
-
当POJO中出现List,保存对象数据,参数名称与对象层次结构名称保持一致,使用数组格式描述集合中对象的位置
-
当POJO中出现Map,保存对象数据,参数名称与对象层次结构名称保持一致,使用映射格式描述集合中对象的位置
注意:SpringMVC默认键List作为对象处理,赋值前先创建对象,然后将nick作为对象的属性进行处理.由于List是接口,无法创建对象,报无法找到构造方法异常;修复类型为可创建对象的ArrayList类型后,对象key创建,但没有nick属性,因此数据为空.此时需要告知SpringMVC的处理器nick是一组数据,而不是一个单一数据.通过@RequestParam注解,将数量大于1个names参数打包成参数数组后,SpringMVC才能识别该参数数据格式,并判定形参类型是否为数组或集合,并按数组或集合对象的形式操作数据.
类型转换器
-
SpringMVC对接收的数据进行自动类型转换,该工作通过Converter接口实现
-
标量转换器
-
集合,数组相关转换器
-
默认转换器
日期类型格式转换
- 声明制动液的转换格式并覆盖系统转换格式
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<!--2.自定义Converter格式类型设定,该设定使用的是同类型覆盖的思想-->
<property name="formatters">
<!--3.使用set保障相同类型的转换器仅保留一个,避免冲突-->
<set>
<!--4.设置具体的格式类型-->
<bean class="org.springframework.format.datetime.DateFormatter">
<!--5.类型规则-->
<property name="pattern" value="yyyy-MM-dd"/>
</bean>
</set>
</property>
</bean>
<!--5.启用自定义Converter-->
<mvc:annotation-driven conversion-service="conversionService"/>
日期类型格式转换(注解版)
- 名称:@DateTimeFormat
- 类型:形参注解,成员变量注解
- 位置:形参前面 或者 成员变量上方
- 作用:为当前参数或变量制定类型转换规则
- 范例:
- 注意:依赖注解驱动支持
<mvc:annotation-driven />
自定义类型转换器
- 自定义类型转换器,实现Converter接口,并制定转换前与转换后的类型
public class MyDateConverter implements Converter<String,Date> {
@Override
public Date convert(String source) {
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = format.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
- 注册自定义类型转换器
<!--1.将自定义Converter注册为Bean,受SpringMVC管理-->
<bean id="myDateConverter" class="com.itheima.converter.MyDateConverter"/>
<!--2.设定自定义Converter服务bean-->
<bean id="conversionService"class="org.springframework.context.support.ConversionServiceFactoryBean">
<!--3.注入所有的自定义Converter,该设定使用的是同类型覆盖的思想-->
<property name="converters">
<!--4.set保障同类型转换器仅保留一个,去重规则以Converter<S,T>的泛型为准-->
<set>
<!--5.具体的类型转换器-->
<ref bean="myDateConverter"/>
</set>
</property>
</bean>
-
- 通过注册自定义转换器,将该功能加入到SpringMVC的转换服务ConverterService中
请求映射
- 名称:@ReuestMapping
- 类型:方法注解
- 位置:处理器类中的方法定义上方
- 作用:绑定请求地址与对应处理方法间的关系
- 范例:
- 访问路径:/requestURL1
请求映射二:
-
名称:@RequestMapping
-
类型:类注解
-
位置:处理器类定义上方
-
作用:为当前处理器中所有方法设定公共的访问路径前缀
-
范例:
- :访问路径:/user/requestURL1
-
请求返回的页面地址默认为当前路径
-
当设置了公共的访问前缀后,当前路径发生了变化,需要根据变化修改地址或修改访问页面的路径
@ReuqestMapping属性
- 常用属性
- value
- method