• 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 默认提供,功能强大,满足常见场景使用,并可指定时区。

  • 相关阅读:
    【Linux高频命令专题(7)】rm
    【Linux高频命令专题(6)】mkdir
    【mongoDB运维篇①】用户管理
    【Linux高频命令专题(5)】rmdir
    【mongoDB中级篇②】索引与expain
    【mongoDB中级篇①】游标cursor
    Lua中的字符串函数库
    ngx_lua 随笔
    Nginx与Lua
    MAC 上搭建lua
  • 原文地址:https://www.cnblogs.com/markLogZhu/p/12876816.html
Copyright © 2020-2023  润新知