所有分类
  • 所有分类
  • 未分类

SpringBoot–全局处理LocalDateTime响应格式(年月日)

简介

说明

项目我们经常会有前后端时间转换的场景,比如:创建时间、更新时间等。一般情况下,前后端使用时间戳或者年月日的格式进行传递。

如果后端收到了前端的参数每次都手动转化为想要的格式,后端每次将数据传给前端时都手动处理为想要的格式实在是太麻烦了。

基于如上原因,本文用示例介绍SpringBoot全局格式配置,将LocalDateTime自动转化为年月日 时分秒 这种格式传给前端。

备注

有人说,可以这样配置:

spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
    serialization:
      write-dates-as-timestamps: false

  • 这种配置只适用于Date这种,不适用于LocalDateTime等。
  • LocalDateTime序列化时默认格式为:”2020-08-19T16:30:18.823″。

注意

本文都采用了全局处理请求格式,请求参数的时间格式统一为:2020-08-19 16:30:18。

局部方案:@JsonFormat

本法:在字段上加@JsonFormat,优先级比全局配置高:如果字段上有@JsonFormat,又有全局格式配置,则以@JsonFormat为主。

Controller

package com.knife.example.business.product.controller;

import com.knife.example.business.product.vo.ProductVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;

@Api(tags = "商品")
@RestController
@RequestMapping("product")
public class ProductController {

    @ApiOperation("查询")
    @GetMapping("query")
    public ProductVO query(LocalDateTime createTime) {
        System.out.println(createTime.toString());

        //省略查数据库等逻辑。
        //为了简便,直接虚构一个vo
        ProductVO productVO = new ProductVO();
        productVO.setCreateTime(createTime);

        return productVO;
    }
}

VO

package com.knife.example.business.product.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.time.LocalDateTime;

@Data
@ApiModel("商品响应类")
public class ProductVO {
    @ApiModelProperty("id")
    private Long id;

    @ApiModelProperty("名字")
    private String name;

    @ApiModelProperty("库存数量")
    private Integer stockQuantity;

    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    // 也可指定时区:@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    // 一般不用指定时区,会采用全局配置的时区
    private LocalDateTime createTime;
}

测试

后端输出

2021-09-16T14:21:13

全局方案1:配置Jackson(推荐)

此内容仅限VIP查看,请先
0

评论0

请先

显示验证码
没有账号?注册  忘记密码?

社交账号快速登录