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

  • 相关阅读:
    IMYSQL-叶金荣
    mysql命令
    实效云计算用户组(ECUG) 与 阿里云
    GO 语言
    MYSQL 源代码编绎脚本
    MYSQL 源代码学习
    LINUX 性能工具使用
    CentOS 5.8 上安装 systemtap-2.6 转
    mysql php nginx
    redis 安装
  • 原文地址:https://www.cnblogs.com/markLogZhu/p/12876816.html
Copyright © 2011-2022 走看看