一、自定义类型转换器
表单提交的任何数据类型全部都是字符串类型,但是后台定义Integer类型,数据也可以封装上,因为Spring框架内部会默认进行数据类型转换。
但是并不能覆盖所有的类型转换,比如字符串转为日期类型,框架只能转换 "2021/1/27" 格式的,无法转换 "2021-01-27" 格式的,这时可以使用自定义类型转换器。
1、定义一个类型转换器类,必须实现Converter<S, T>接口,该接口有两个泛型,S表示接收的类型,T表示目标类型。
public class StringToDateConverter implements Converter<String, Date> {
/**
* 用于把String类型转成日期类型
*/
@Override
public Date convert(String source) {
DateFormat format = null;
try {
if(StringUtils.isEmpty(source)) {
throw new NullPointerException("请输入要转换的日期");
}
format = new SimpleDateFormat("yyyy-MM-dd");
Date date = format.parse(source); return date;
} catch (Exception e) {
throw new RuntimeException("输入日期有误");
}
}
}
2、在springmvc.xml文件中配置类型转换器。
<!-- 注册自定义类型转换器 -->
<bean id="converterService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<!-- 给工厂注入自定义的类型转换器 -->
<property name="converters">
<set>
<bean class="cn.itcast.utils.StringToDateConverter"/>
</set>
</property>
</bean>
<!-- 开启SpringMVC框架注解的支持、自定义转换类型功能 -->
<mvc:annotation-driven conversion-service="conversionService"/>
二、原生ServletAPI对象的获取及使用
SpringMVC还支持使用原始ServletAPI对象作为控制器方法的参数。
支持原始ServletAPI对象有: HttpServletRequest、HttpServletResponse、HttpSession、java.security.Principal、Locale、InputStream、OutputStream、Reader、Writer。
我们可以把上述对象,直接写在控制的方法参数中使用。
@Controller("testController")
@RequestMapping("/test")
public class TestController {
@RequestMapping("/testServletAPI")
public String testServletAPI(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
System.out.println(request);
System.out.println(response);
System.out.println(session);
return "success";
}
}