fastjson序列化时间自定义格式示例详解

 更新时间:2023年04月27日 15:12:24   作者:bright丶  
这篇文章主要为大家介绍了fastjson序列化时间自定义格式示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Java8 的日期相关 API

Java8 的日期相关 API用起来是真香,但免不了遇到在用旧版 1.0 API 的情况。这不,跟另一个部门做对接,人家说你发过来的时间怎么带个 T,我这边没法解析。。。我回头就是一句xxx,情绪发泄完该做的事咱也得做不是,下面就看看怎么处理这个问题。

首先建一个项目添加依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.80</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
        </dependency>
    </dependencies>

写个带有时间属性的类,就叫 Task 吧,

@Data
@Accessors(chain = true)
public class Task {
    private String name;
    private LocalDateTime startTime;
    private LocalDateTime endTime;
}

看一下 fastjson 序列化方法,发现可以传个配置对象,看看这个能不能解决问题

/**
 * @param object 要序列化的对象
 * @param config 序列化配置
 * @param features
 */
public static String toJSONString(Object object, SerializeConfig config, SerializerFeature... features)

这个配置类里面有一个 put 方法,可以设置不同的类型使用不同的序列化器,所以我们可以通过给日期类型设置自定义的序列化器来实现自定义日期格式

/**
 * @param type 类型
 * @param value 序列化器
 */
public boolean put(Type type, ObjectSerializer value)

自定义序列化器并重写序列化方法,这里只针对 LocalDateTime 类型进行了自定义,其他类型如出一辙。

public class JsonSerializer implements ObjectSerializer {
    @Override
    public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
        SerializeWriter out = serializer.getWriter();
        if (object == null) {
            serializer.getWriter().writeNull();
            return;
        }
        // 对LocalDateTime类型进行格式转化
        out.write("\"" + ((LocalDateTime) object).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "\"");
    }
}

配置类中注入 Spriing 容器

@Configuration
public class JsonConfig {
    @Bean
    public SerializeConfig serializeConfig() {
        SerializeConfig config = new SerializeConfig();
        // 对LocalDateTime类型指定自定义的序列化器
        config.put(LocalDateTime.class, objectSerializer());
        return config;
    }
    @Bean
    public ObjectSerializer objectSerializer() {
        return new JsonSerializer();
    }
}

写个接口做下测试

@RestController
@RequestMapping
public class FastJsonDemo {
    @Autowired
    private SerializeConfig serializeConfig;
    @RequestMapping("/test")
    public String jsonTest() {
        LocalDateTime now = LocalDateTime.now();
        Task task = new Task().setName("拯救地球任务").setStartTime(now).setEndTime(now.plusDays(10));
        return JSON.toJSONString(task, serializeConfig);
    }
}

浏览器调用接口,看下结果

日期里面的 T 没有了,变成了自定义的格式,搞定!

以上就是fastjson序列化时间自定义格式示例详解的详细内容,更多关于fastjson序列化时间格式的资料请关注脚本之家其它相关文章!

相关文章

  • Jmeter如何基于命令行运行jmx脚本

    Jmeter如何基于命令行运行jmx脚本

    这篇文章主要介绍了Jmeter如何基于命令行运行jmx脚本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • java 实现迷宫回溯算法示例详解

    java 实现迷宫回溯算法示例详解

    这篇文章主要介绍了java 实现迷宫回溯算法示例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 将idea工程打包成jar文件的全步骤

    将idea工程打包成jar文件的全步骤

    这篇文章主要给大家介绍了关于将idea工程打包成jar文件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • 详解Java中Vector和ArrayList的区别

    详解Java中Vector和ArrayList的区别

    这篇文章主要为大家详细介绍了Java中Vector和ArrayList的区别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • SpringBoot项目的配置文件中设置server.port不生效问题

    SpringBoot项目的配置文件中设置server.port不生效问题

    这篇文章主要介绍了SpringBoot项目的配置文件中设置server.port不生效问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • java版数独游戏核心算法(一)

    java版数独游戏核心算法(一)

    这篇文章主要为大家详细介绍了java版数独游戏的核心算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • springboot 实现Http接口加签、验签操作方法

    springboot 实现Http接口加签、验签操作方法

    这篇文章主要介绍了springboot 实现Http接口加签、验签操作,服务之间接口调用,通过签名作为安全认证来保证API的安全性,本文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • Jackson反序列化@JsonFormat 不生效的解决方案

    Jackson反序列化@JsonFormat 不生效的解决方案

    这篇文章主要介绍了Jackson反序列化@JsonFormat 不生效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • SpringBoot整合java诊断工具Arthas解读

    SpringBoot整合java诊断工具Arthas解读

    这篇文章主要介绍了SpringBoot整合java诊断工具Arthas,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 使用graalvm为带有反射功能的java代码生成native image的示例详解

    使用graalvm为带有反射功能的java代码生成native image的示例详解

    graalvm让native镜像支持反射的关键是利用json提前告诉它哪些类的哪些方法会被反射调用,然后它就能力在运行时支持反射了,这篇文章主要介绍了如何使用graalvm为带有反射功能的java代码生成native image,需要的朋友可以参考下
    2024-02-02

最新评论