但行好事
莫论前程❤

SpringMVC详解(五.1)–绑定Date日期类型的两种方式总结

MappingJackson2HttpMessageConverter详解

示例

User.java

package mobi.liupeng.po;

import java.util.Date;

public class User {
    private Integer id;

    private String username;

    private String sex;

    private Date birthday;

    //get and set方法忽略
}

1,在bean实体中使用@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")

public class User {
    ...

    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date birthday;

    ...
}

2,自定义一个全局类型转换器(由String类型到 Date 类型的转换器 )

package mobi.liupeng.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.core.convert.converter.Converter;

//需要实现Converter接口,这里是将String类型转换成Date类型
public class DateConverter implements Converter<String, Date> {

    @Override
    public Date convert(String source) {
        //实现将字符串转成日期类型(格式是yyyy-MM-dd HH:mm:ss)
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            /**
            * 解析:
            * public Date parse(String source)throws ParseException //-->此时取得的是全部时间数。
            * 格式化:
            * public final String Format(Date date)   //-->将时间重新格式化成字符串显示。
            */
            return dateFormat.parse(source);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //如果参数绑定失败返回null
        return null;
    }

}

在 springmvc.xml 文件中配置转换器

<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>

    <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="converters">
            <!-- 自定义转换器的类名 -->
            <bean class="mobi.liupeng.util.DateConverter"></bean>
        </property>
    </bean>

3.MappingJackson2HttpMessageConverter解析json数据

众所周知,用Spring cloud构建微服务架构时,后台接收controller通常用@RestController注解。 @Restcontroller@Controller@ResponseBody的结合体。

这样就将后台返回的Java对象转换为Json字符串传递给前台,

但是当数据库字段为date类型时,@ResponseBody注解在转换日期类型时会默认把日期转换为时间戳(例如: date:2017-10-25 转换为 时间戳:15003323990)。

全局修改,用MappingJackson2HttpMessageConverter配置在XML(SpringMVC)或者配置在Application.Java启动类(Spring boot、Spring cloud)。

配置在Application.Java启动类(Spring boot、Spring cloud):

@Bean
public MappingJackson2HttpMessageConverter getMappingJackson2HttpMessageConverter() {
    MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
    //设置日期格式
    ObjectMapper objectMapper = new ObjectMapper();
    SimpleDateFormat smt = new SimpleDateFormat("yyyy-MM-dd");
    objectMapper.setDateFormat(smt);
    mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper);
    //设置中文编码格式
    List<MediaType> list = new ArrayList<MediaType>();
    list.add(MediaType.APPLICATION_JSON_UTF8);
    mappingJackson2HttpMessageConverter.setSupportedMediaTypes(list);
    return mappingJackson2HttpMessageConverter;
}

注意:

Spring3.x 用MappingJacksonHttpMessageConverter

Spring4.x 用MappingJackson2HttpMessageConverter

配置在XML(SpringMVC)

<mvc:annotation-driven>
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
            <property name="objectMapper" ref="customObjectMapper"></property>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>
@Component("customObjectMapper")
public class CustomObjectMapper extends ObjectMapper {
    public CustomObjectMapper() {
        CustomSerializerFactory factory = new CustomSerializerFactory();
        factory.addGenericMapping(Date.class, new JsonSerializer<Date>() {
            @Override
            public void serialize(Date value, JsonGenerator jsonGenerator,
            SerializerProvider provider) throws IOException, JsonProcessingException {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                jsonGenerator.writeString(sdf.format(value));
            }
    });
    this.setSerializerFactory(factory);
}
}

或者

<mvc:annotation-driven>
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <property name="objectMapper" ref="jsonObjectMapper"></property>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

<bean id="jsonObjectMapper"                    class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
</bean>
赞(1) 打赏
未经允许不得转载:刘鹏博客 » SpringMVC详解(五.1)–绑定Date日期类型的两种方式总结
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏