Converter转换器 进行日期格式转换
问题? 后端需要的是一个日期类型,而前端传来的是一个字符串,那如何来进行解析,可以直接让后台使用呢
这是就要用到conversion-service转换器了
<!-- 此处是为了让前端传来json字符串的date now属性,直接转换成后台直接识别的类型
简单来说就是把前端传来的"now": "2021-05-07 00:29:29" ————>后台2021-05-07
-->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<!-- 自定义转换日期类-->
<bean class="com.yanzhen.utils.DateConvert"></bean>
</set>
</property>
</bean>
<!--字符集 org.springframework.http.converter.StringHttpMessageConverter 结果String类型不是utf-8-->
<bean id="charset" class="java.nio.charset.Charset" factory-method="lookup">
<constructor-arg value="UTF-8"/>
</bean>
<!-- 主要就是为了Spring MVC来用的,提供Controller请求转发,json自动转换等功能 -->
<!--message-converters:HttpMessageConvert 负责将一个请求信息转换为一个对象(类型为T),将对象(类型为T)转换为响应信息。-->
<!--ConversionService:Spring MVC通过反射机制对目标处理方法签名进行分析,将请求消息绑定到处理方法入参中,核心部件是DataBinder-->
<mvc:annotation-driven conversion-service="conversionService">
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg name="defaultCharset" ref="charset"/>
</bean>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<!-- 将json字符串中日期格式修改-->
<property name="objectMapper">
<bean class="com.fasterxml.jackson.databind.ObjectMapper">
<property name="dateFormat">
<bean class="java.text.SimpleDateFormat">
<constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss"/>
<!-- 日期格式 "now": "2021-05-07 00:29:29"-->
</bean>
</property>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
编写自定义的Converter转换器
public class DateConvert implements Converter<String,Date> {
@Override
public Date convert(String source) {
try {
if(!Strings.isNullOrEmpty(source) && source.indexOf(":")>0){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.parse(source);
}else{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.parse(source);
}
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}