springboot 时间格式问题

时间格式问题总结

常用的注解 @JsonFormat@JsonSerialize@DateTimeFormat

页面需要时间戳时

如果不是 Mybatis 中的 resultMap类型查出来的内容 那么需要使用@JsonSerialize对实体类时间字段进行限制

  • 如果查询出来的时候使用的 resultType 那么实体中的字段会被框架默认的格式转换,就得不到时间戳格式

    /**
    * 在相关属性上添加 @JsonSerialize(using = DateToLongSerializer.class)
    * 其中DateToLongSerializer是自定义的转换方法
    *
    **/
    public class Test{
         @JsonSerialize(using = DateToLongSerializer.class)
         @Column(name = "CPR_RecordTime")
         private Date cprRecordtime;
    }
    
    //********************************************************************
    
    import com.fasterxml.jackson.core.JsonGenerator;
    import com.fasterxml.jackson.databind.JsonSerializer;
    import com.fasterxml.jackson.databind.SerializerProvider;
    
    import java.io.IOException;
    import java.util.Date;
    
    /**
     * @ClassName: DateToLongSerializer
     * @Description: 重写jackson对时间的序列化
     * @Author: yjg
     * @Date: 2020/8/17 11:07
     * @Version: 1.0
     **/
    public class DateToLongSerializer extends JsonSerializer<Date> {
    
            @Override
            public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
                jsonGenerator.writeNumber(date.getTime());
            }
    
    }
    
    

页面需要 YYYY-MM-dd HH:mm:ss 格式

很多时候被默认序列化后的时间,可能不和IE兼容,要么带了 T 要么 末尾多了.0 之类的,此时需要对时间进行特殊处理

  • 直接从数据库查出json格式的字符串时,在数据库层面上对时间进行处理

    例如 sqlserver : CONVERT(varchar(100), dateTemp[时间字段的名称], 20)

  • 使用对象传递返回值的时候,可以通过实体类上添加注解实现

    接收参数时需要转换特定格式的[就是后台接收前台参数时]

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    //属性或者set上使用
    

    传递参数时需要转换特定格式的[就是后台传前台]

    //设置时区为上海时区,时间格式自己据需求定。
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    //属性或者get上使用
    

    如果项目时间格式要求都是统一的那么可以直接在配置文件中限制时间格式

    spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
    spring.jackson.time-zone=GMT+8
    
    #返回时间戳
    spring
      jackson:
        serialization:
          write-dates-as-timestamps: true
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值