在 SpringBoot 项目中, 如何统一 JSON 格式化中的日期格式
问题现在的关系型数据库例如PostgreSQL/MySQL, 都已经对 JSON 类型提供相当丰富的功能, 项目中对于不需要检索但是又需要结构化的存储, 会在数据库中产生很多 JSON 类型的字段, 与 Jackson 做对象的序列化和反序列化配合非常方便.
如果 JSON 都是类定义的, 这个序列化和反序列化就非常透明 -- 不需要任何干预, 写进去是什么, 读出来就是什么. 但是如果 JSON 在 Java 代码中是定义为一个 Map, 例如 Map<String, Object> 那么就有问题了, 对于 Date 类型的数据, 在存入之前是 Date, 取出来之后就变成 Long 了.
- SomePO po = new SomePO();
- //...
- Map<String, Object> map = new HashMap<>();
- map.put("k1", new Date());
- po.setProperties(map);
- //...
- mapper.insert(po);
- //...
- SomePO dummy = mapper.select(po.id);
- // 这里的k1已经变成了 Long 类型
- Object k1 = dummy.getProperties().get("k1");
查看 ObjectMapper 的源码, 可以看到其对Date格式的序列化和反序列化方式设置于_serializationConfig 和 _deserializationConfig 这两个成员变量中, 可以通过 setDateFormat() 进行修改
- public class ObjectMapper extends ObjectCodec implements Versioned, Serializable {
- //...
- protected SerializationConfig _serializationConfig;
- protected DeserializationConfig _deserializationConfig;
- //...
- public ObjectMapper setDateFormat(DateFormat dateFormat) {
- this._deserializationConfig = (DeserializationConfig)this._deserializationConfig.with(dateFormat);
- this._serializationConfig = this._serializationConfig.with(dateFormat);
- return this;
- }
- public DateFormat getDateFormat() {
- return this._serializationConfig.getDateFormat();
- }
经验总结扩展阅读
- 求富有哲理的对联越多越好
- 治疗高血压有哪些偏方?
- 女娲是怎么来的
- 贴对联要男的贴好还是女的贴好
- vivoX70pro和苹果11区别对比_哪款更值得入手
- 小米10s和小米10拍照哪个好_小米10s和小米10拍照对比
- vivox70pro+和小米11Ultra那个好_详细对比
- 免疫力低下吃维c行吗
- 感冒对血压的影响大吗
- 苹果6splus如何设置归属地