文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-05-18 05:22

关注

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 序列化方法,发现可以传个配置对象,看看这个能不能解决问题


public static String toJSONString(Object object, SerializeConfig config, SerializerFeature... features)

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


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序列化时间格式的资料请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯