SpringBoot之日期时间格式化

Posted markLogZhu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot之日期时间格式化相关的知识,希望对你有一定的参考价值。

利用 jackson 的 json 序列化和反序列化

/**
 * @author zhu
 * @description: Jackson 配置
 * @date 2020-05-12 15:15
 */
@Configuration
public class JacksonConfig {

    private static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
    private static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";
    private static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";


    @Bean
    public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        ObjectMapper objectMapper = getObjectMapper();
        converter.setObjectMapper(objectMapper);
        return converter;
    }

    private ObjectMapper getObjectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        // 忽略 JSON 字符串中不识别的属性
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        // 忽略无法转换的对象
        objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
        // PrettyPrinter 格式化输出
        objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
        // NULL 不参与序列化
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

        // 指定时区
        objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));
        // 日期类型字符串处理
        objectMapper.setDateFormat(new SimpleDateFormat(DEFAULT_DATE_TIME_FORMAT));

        // Java8日期处理
        JavaTimeModule javaTimeModule = new JavaTimeModule();
        javaTimeModule.addSerializer(LocalDateTime.class, 
                new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)));
        javaTimeModule.addSerializer(LocalDate.class, 
                new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)));
        javaTimeModule.addSerializer(LocalTime.class, 
                new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));
        javaTimeModule.addDeserializer(LocalDateTime.class, 
                new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)));
        javaTimeModule.addDeserializer(LocalDate.class, 
                new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)));
        javaTimeModule.addDeserializer(LocalTime.class, 
                new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));
        objectMapper.registerModule(javaTimeModule);
        return objectMapper;
    }

}

总结:

  • 支持 content-type=application/json 请求中格式为 yyyy-MM-dd HH:mm:ss 的字符串,后台用@RequestBody 接收,及返回值 Date 转为 yyyy-MM-dd HH:mm:ss 格式 String;
  • 支持java8日期api;
  • 不支持 content-type=application/json 请求中 yyyy-MM-dd 等类型的字符串转为 Date;

个别字段需使用 yyyy-MM-dd 格式时,可使用 SpringBoot 自带的注解 :

@JsonFormat(pattern = yyyy-MM-dd, timezone=GMT+8)
private Date sendDate;

SpringBoot 默认提供,功能强大,满足常见场景使用,并可指定时区。

以上是关于SpringBoot之日期时间格式化的主要内容,如果未能解决你的问题,请参考以下文章

springboot之Date格式化

如何从我的 DatePicker 片段中传输格式化的日期字符串?

springboot之jackson的两种配置方式

layui之日期和时间组件

SpringBoot-日期格式化

SpringBoot 项目 返回时间 日期格式不正确 解决办法