• Jackson无法将LocalDateTime序列化成字符串的解决办法


    1.情景展示

      在web开发过程中,如果使用的是SpringBoot框架的话, 我们通常使用在前后端数据交互的时候,我们通常会涉及到日期类型的转换。

      当我们需要将日期类型转换成字符串响应给前端时,只需要一个注解@JsonFormat就可以搞定

      这样,前端接收到的将是2021-03-17 16:51:51格式的日期格式字符串,根本无需我们手动将日期转字符串。

      使用@JsonFormat,进行手动序列化时,会不会出问题呢?

    2.原因分析

      前后端交互,使用@JsonFormat可以解决日期问题,但是,在实际开发过程中,往往我们服务器对服务器,这样一来@JsonFormat就失效了。

      下面,我们来测试一下吧:

      即:它只能使用于前后端交互,具体原理我不清楚。

    3.解决方案

      既然@JsonFormat不能用,那我们只能另想办法了

      通过修改ObjectMapper日期序列化格式来实现

      导包

    <!--日期类进行序列化时,指定格式-->
    <dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-jsr310</artifactId>
        <version>2.11.3</version>
    </dependency>

      代码实现

    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
    import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
    import java.time.LocalDateTime;
    import java.time.format.DateTimeFormatter;  
    /*
     * 将包含LocalDateTime类型的属性进行序列化时转成时间字符串
     * @description: 通过Jackson实现
     * @attention: 如果自定义key名称的话,通过添加注解@JsonProperty来实现
     * @date: 2021-03-17 15:42
     * @param: bean
     * @return: java.lang.String json字符串
     * 生成的日期格式:yyyy-MM-dd HH:mm:ss
     */
    public static String fromBeanWithLocalDateTime(Object bean) {
        if (null == bean) return "";
    
        String jsonStr = "";
        try {
            ObjectMapper mapper = new ObjectMapper();
            // 初始化JavaTimeModule
            JavaTimeModule timeModule = new JavaTimeModule();
            // 设置LocalDateTime的序列化格式
            DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            timeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(dateTimeFormatter));
            mapper.registerModule(timeModule);
            jsonStr = mapper.writeValueAsString(bean);
        } catch (JsonProcessingException e) {
            log.error("JavaBean-->json字符串转换失败:" + e.getMessage());
            return "";
        }
    
        log.debug("JavaBean转json字符串前:
    " + bean.toString());
        log.debug("JavaBean转json字符串后:
    " + jsonStr);
        return jsonStr;
    }
    

      效果展示:

     

       

    写在最后

      哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

     相关推荐:

  • 相关阅读:
    CMD 常用命令
    CMD 删除脚本
    HAproxy 介绍
    HAproxy 配置参数详解
    HAproxy 源码包安装
    lvs keepalived 安装配置详解【转】
    linux下负载均衡(LVS安装与配置)【转】
    CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡【转】
    Linux负载均衡软件LVS之二(安装篇)[转]
    Mysql + keepalived 实现双主热备读写分离【转】
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/14550566.html
Copyright © 2020-2023  润新知