自定义类型转换器
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类型了。