10.SpringMVC 自定义类型转换器
原创
©著作权归作者所有:来自51CTO博客作者咸咸瑜瑜的原创作品,请联系作者获取转载授权,否则将追究法律责任
自定义类型转换器
SpringMVC 默认已经提供了一些常用的类型转换器,例如:客户端提交的字符串转换成int型进行参数设置。
那么如果是时间类型它也会自动转,但是呢 每个国家的时间类型都不一样对吧,你能确保SpringMVC 都给你转吗? 这是不可能的,例如:
package com.bihu.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Date;
@Controller
public class TestController {
@RequestMapping("/ok")
@ResponseBody//直接响应 不进行跳转
public void TestConverter(Date date){
System.out.println(date);
}
/***
* 当你访问下面网址时:
* 成功访问:http://localhost:8080/ok?date=2020/02/03
* 失败报错:http://localhost:8080/ok?date=2020-02-03
*/
}
所以呢 如果你想是 2020-02-03的这样进来 怎么办:
自定义类型转换器的开发步骤:
① 定义转换器类实现Converter接口
② 在配置文件中声明转换器
③ 在中引用转换器
代码:
1️⃣
package com.bihu.Converter;
import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
//① 定义转换器类实现Converter接口
//实现这个接口 选有泛型的 第一个是你原来的类型 第二个是你要转的类型
public class DateConverter implements Converter<String,Date> {
//convert 是重写的方法 -- 形参是你传进来的字符串
@Override
public Date convert(String myDate) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = sdf.parse(myDate); //此方法需处理异常
} catch (ParseException e) {
e.printStackTrace();
}
return date; //将转换好的时间 返回去
}
}
然后:2️⃣ 和 3️⃣
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--扫描注解-->
<context:component-scan base-package="com.bihu"/>
<!-- 原始容器处理静态资源 -->
<mvc:default-servlet-handler/>
<!-- ② 在配置文件中声明转换器:ConversionServiceFactoryBean //转换服务工厂bean
他的参数是Set 我们吧我们自己的转换器 注入
记得加ID 引用中引入
-->
<bean id="DateConverter" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="com.bihu.Converter.DateConverter"></bean>
</list>
</property>
</bean>
<!--③ 在<annotation-driven>中引用转换器-->
<!--驱动注解 在这里引入自定义转换器 [conversion-service] -->
<mvc:annotation-driven conversion-service="DateConverter" />
</beans>
然后呢 你尝试访问 http://localhost:8080/ok?data=2020-02-03 也可以将 日期制动封装到Date类型了。
作者:咸瑜