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

  • 相关阅读:
    第15.9节 PyQt学习入门:使用Qt Designer进行GUI设计的步骤
    PyQt学习随笔:Model/View开发时在view数据项中设置不同角色数据的方法
    PyQt学习随笔:Model/View开发时从Model相关类派生自定义类需要注意的问题
    PyQt学习随笔:重写setData方法截获Model/View中视图数据项编辑的注意事项
    PyQt学习随笔:Model/View中视图数据项编辑变动实时获取变动数据的方法
    Python中高级知识(非专题部分)学习随笔
    clistctrl 虚拟列表
    数字图象处理图片库
    MFC中char*,string和CString之间的转换
    图像分割之(四)OpenCV的GrabCut函数使用和源码解读
  • 原文地址:https://www.cnblogs.com/markLogZhu/p/12876816.html
Copyright © 2011-2022 走看看