前言

最近学习Springboot+Mybatis-puls整合,遇到一个问题,数据库存储的DATETIME类型字段返回给前端是以时间戳返回,需要格式化为指定格式如yyyy-MM-dd HH:mm:ss格式

问题描述

首先创建了controller中的一个方法,根据前端传入的当前页码page​,分页大小pageSize​返回给前端分页数据,用了Mybatis-plus提供的方法:IService.page,R是自定义的通用返回结果类,后端响应的数据最终都会封装成此对象​

    @GetMapping("/page")
    public R page(Integer page,Integer pageSize){
       Page<CategoryEntity> categoryEntityPage =categoryService.page(new Page<>(page, pageSize),new QueryWrapper<CategoryEntity>().orderByAsc("sort"));
        return R.ok(categoryEntityPage);
    }

数据库关于时间的字段类型是DATETIME的
在这里插入图片描述
返回给前端的JSON数据中,关于时间的字段:createTimeupdateTime都是以原格式返回时间戳

{
	"code": 1,
	"data": {
		"records": [
			{
				"id": 1397844263642378242,
				"type": 1,
				"sort": 1,
				"createTime": 1622078218000,
				"updateTime": 1626351923000,
				"createUser": 1,
				"updateUser": 1
			},
			{
				"id": 1397844303408574465,
				"type": 1,
				"sort": 2,
				"createTime": 1622078227000,
				"updateTime": 1622615242000,
				"createUser": 1,
				"updateUser": 1
			}
		]
	}
}
解决方案

在对应的Entity类中,给对应属性添加@JsonFormat​注解

@JsonFormat​注解用于将Date日期格式化为指定格式的字符串。由于在序列化时间时是按照国际标准时间GMT进行格式化的,最后接受到的数据会早8个小时,所以应该添加timezone = "GMT+8"​属性将时区设置为于国内相同的CST时区,并设置当前时区为国区:locale = "zh"​,如果不设置,locale​默认会调用本机的时区。

	/**
	 * 创建时间
	 */
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", locale = "zh", timezone = "GMT+8")
	private Date createTime;
	/**
	 * 更新时间
	 */
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", locale = "zh", timezone = "GMT+8")
	private Date updateTime;

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐