当前位置:

首页 > 编程开发 > SpringBoot中Jackson日期格式化的方法

SpringBoot中Jackson日期格式化的方法

Jackson日期格式化技巧使用SpringBoot时,需要使用Jackson处理一些JavaTimeAPI类型的JSON序列化问题,在处理一些类的字段时,可以通过直接在属性上加注解的方式来指定其格式化样式。但是,昨天同事遇到一个格式化Map数据的问题,这样就不能通过加注解来解决格式化样式的问题了。在网上各种搜索,各种尝试后,终于解决了这个问题,记录一下,以备不时之需。闲言少叙,直接上代码:packagecom.diguage.demo.config;importcom.fasterxml.jackson

本文目录

    Jackson 日期格式化技巧

    使用 Spring Boot 时,需要使用 Jackson 处理一些 Java Time API 类型的 JSON 序列化问题,在处理一些类的字段时,可以通过直接在属性上加注解的方式来指定其格式化样式。但是,昨天同事遇到一个格式化 Map 数据的问题,这样就不能通过加注解来解决格式化样式的问题了。

    在网上各种搜索,各种尝试后,终于解决了这个问题,记录一下,以备不时之需。

    闲言少叙,直接上代码:

    package com.diguage.demo.config;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.databind.util.StdDateFormat;
    import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
    import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
    import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
    import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
    import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Primary;
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.time.LocalDate;
    import java.time.LocalDateTime;
    import static com.fasterxml.jackson.databind.SerializationFeature.*;
    import static java.time.format.DateTimeFormatter.ofPattern;
    /
     * 配置类
     *
     * @author D瓜哥 · https://www.diguage.com
     */
    @Configuration
    public class Config {
        /
         * 创建 ObjectMapper 对象,配置日期格式化
         *
         * @author D瓜哥 · https://www.diguage.com
         */
        @Bean
        @Primary
        public ObjectMapper objectMapper() {
            ObjectMapper mapper = new ObjectMapper();
            String dateTimepattern = "yyyy-MM-dd HH:mm:ss";
            String datePattern = "yyyy-MM-dd";
            DateFormat dateFormat = new SimpleDateFormat(dateTimepattern);
            mapper.setDateFormat(dateFormat);
            mapper.configure(WRITE_DATES_AS_TIMESTAMPS, false);
            mapper.setDateFormat(new StdDateFormat().withColonInTimeZone(true));
            JavaTimeModule javaTimeModule = new JavaTimeModule();
            javaTimeModule.addDeserializer(LocalDate.class,
                    new LocalDateDeserializer(ofPattern(datePattern)));
            javaTimeModule.addSerializer(LocalDate.class,
                    new LocalDateSerializer(ofPattern(datePattern)));
            javaTimeModule.addDeserializer(LocalDateTime.class,
                    new LocalDateTimeDeserializer(ofPattern(dateTimepattern)));
            javaTimeModule.addSerializer(LocalDateTime.class,
                    new LocalDateTimeSerializer(ofPattern(dateTimepattern)));
            mapper.registerModule(javaTimeModule);
            return mapper;
        }
    }

    后续问题

    不知道通过这种方式指定日期格式化样式后,在处理一些打格式化样式注解的字段时,会有什么样的表现?有机会测试一下。

    补充:Jackson 统一配置 日期转换格式

    方式一:配置文件yml中配置

    spring:
        jackson:
            default-property-inclusion: ALWAYS
            time-zone: GMT+8
            date-format: yyyy-MM-dd HH:mm:ss

    这样序列化后,Date类型会被格式化成配置中的格式。

    方式二:配置类中配置创建JacksonConfig.java

    @Configuration
    public class JacksonConfig {
    
        @Bean
        @Order(Ordered.HIGHEST_PRECEDENCE)
        public Jackson2ObjectMapperBuilderCustomizer customJackson() {
            return new Jackson2ObjectMapperBuilderCustomizer() {
                @Override
                public void customize(Jackson2ObjectMapperBuilder builder) {
                    builder.serializerByType(LocalDateTime.class,
                            new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
                    builder.serializerByType(LocalDate.class,
                            new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
                    builder.serializerByType(LocalTime.class,
                            new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss")));
                    builder.deserializerByType(LocalDateTime.class,
                            new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
                    builder.deserializerByType(LocalDate.class,
                            new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
                    builder.deserializerByType(LocalTime.class,
                            new LocalTimeDeserializer(DateTimeFormatter.ofPattern("HH:mm:ss")));
                    builder.serializationInclusion(JsonInclude.Include.NON_NULL);
                    builder.failOnUnknownProperties(false);
                    builder.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
                }
            };
        }
    }
    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 jackson
    相关文章 更多
    Java实现HTTP请求与JSON解析的完整代码示例
    Java实现HTTP请求与JSON解析的完整代码示例

    本文提供Java标准库HttpClient发起HTTP GET/POST请求并结合Jackson进行JSON数据反序列化与序列化的完整代码示例与工程实践指南。

    XML序列化中大于号(>)为何无需转义?Jackson的正确行为解析
    XML序列化中大于号(>)为何无需转义?Jackson的正确行为解析

    在XML中,大于号(>)无特殊语法意义,仅在结束标签等特定位置需转义,字符数据中无需转义;小于号(

    如何解决 Jackson 无法识别父类字段的问题
    如何解决 Jackson 无法识别父类字段的问题

    使用@Jacksonized注解时,Jackson反序列化子类会忽略父类字段导致错误。解决方案是移除该注解或改用@SuperBuilder(需Lombok1.18.20+),确保Jackson通过标准反射正确绑定继承字段,从而避免数据丢失。

    如何解决 Jackson 无法识别父类字段的反序列化问题
    如何解决 Jackson 无法识别父类字段的反序列化问题

    Lombok的@Jacksonized注解干扰Jackson对继承结构中父类字段的识别,导致反序列化抛出UnrecognizedPropertyException。推荐移除该注解并保留@Builder,依赖Jackson原生机制即可正常解析继承链字段。若需保留注解,则需手动扩展Builder,但复杂度较高。

    springBoot项目常用目录有哪些
    springBoot项目常用目录有哪些

    springBoot项目常用目录springBoot项目的目录结构及名规范介绍基于SpringBoot开发时的目录结构及命名规范,通过介绍能够为你解决,在实际项目中如何规划目录结构?如何命名目录更规范?各个目录分别代表什么含义?等三个问题。目录说明servicex//项目名|-admin-ui//管理服务前端代码(一般将UI和SERVICE放到一个工程中,便于管理)|-servicex-auth//模块1|-servicex-common//模块2|-servicex-gateway//模块3|-serv

    提升应用程序性能:Java 中 JSON 的有效处理
    提升应用程序性能:Java 中 JSON 的有效处理

    JSON(javascriptObjectNotation)是一种流行的数据格式,广泛用于WEB服务、应用程序编程接口(api)和数据交换。它是一种轻量级、基于文本的格式,易于解析和生成。Java语言提供了多种方法来处理jsON数据,其中最常用的方法是使用JSON库。最受欢迎的JavaJSON库是Jackson和GSON。Jackson是一个功能强大的库,提供了广泛的特性,包括数据绑定、流处理和树形结构遍历。GSON是一个简洁而高效的库,专注于快速且易于使用的JSON解析和生成。JacksonJackso

    Java JSON 数据处理:解析与转换的技艺
    Java JSON 数据处理:解析与转换的技艺

    简介:JSON(javascriptObjectNotation)是一种广泛用于数据交换的轻量级数据格式。在Java中处理jsON至关重要,本文将深入探讨如何解析和转换JSON数据,介绍流行的库并提供示例代码。解析JSON数据使用JacksonJackson是一个高性能的JavaJSON处理库。要解析JSON数据,可以使用ObjectMapper类:ObjectMappermapper=newObjectMapper();JsonnoderootNode=mapper.readTree(jsonStr);

    探秘Java JSON处理:初学者到高级者
    探秘Java JSON处理:初学者到高级者

    JSON处理的基础JSON(javascriptObjectNotation)是一种轻量级数据交换格式,广泛用于WEB和移动应用中。它是一种基于文本的数据结构,表示为键值对的对象和数组。在Java中,jsON序列化和反序列化提供了在Java对象和JSON表示之间进行转换的能力。Java中JSON序列化的最佳实践使用第三方库:Jackson和Gson等库提供了开箱即用的序列化和反序列化功能,并支持丰富的功能。指定字段:使用@JsonProperty注解指定要序列化的字段,从而控制JSON输出。忽略字段:使用

    揭秘 Java JSON 解析的数据解析技巧
    揭秘 Java JSON 解析的数据解析技巧

    在当今数据驱动的世界中,JSON已成为交换和存储数据的流行格式。Java,作为一种强大的编程语言,提供了丰富的库和框架来方便地解析和处理jsON数据。了解Java中JSON解析的最佳实践至关重要,以确保数据处理的效率和准确性。解析JSON的常用库Java生态系统提供了强大的库来解析JSON,包括:Jackson:一个高性能且功能强大的JSON解析库,支持流式处理和注释绑定。Gson:谷歌开发的一个轻量级且易于使用的JSON解析库,专注于简单性和内存效率。使用Jackson解析JSON使用Jackson解析

    解析SpringBoot和SpringMVC之间的异同
    解析SpringBoot和SpringMVC之间的异同

    解析SpringBoot和SpringMVC之间的异同SpringBoot和SpringMVC是Java领域中非常重要的开发框架。虽然它们都属于Spring框架的一部分,但是在使用和功能上有一些明显的区别。本文将对SpringBoot和SpringMVC进行比较,解析它们之间的异同。首先,让我们来了解一下SpringBoot。SpringBo

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。