@JsonFormat与@DateTimeFormat

@JsonFormat与@DateTimeFormat注解的使用

@JsonFormat(pattern=“yyyy-MM-dd”,timezone = “GMT+8”)
pattern:是你需要转换的时间日期的格式
timezone:是时间设置为东八区,避免时间在转换中有误差
JsonFormat主要是后台到前台的时间格式的转换
例如数据库数据格式为:2020-09-22 08:37:10 前端页面要展示:yyyy/MM/dd HH:mm:ss
则可以使用注解 @JsonFormat(pattern = “yyyy/MM/dd HH:mm:ss”,timezone=“GMT+8”)

@DateTimeFormat作用是前后到后台的时间格式的转换,使用"yyyy-MM-dd"格式的字符串传入日期类型数据是入参转换没有问题,使用"yyyy-MM-dd HH:mm:ss"格式时间字符串就会报错
原因是springboot默认采用jackson,而jackson只能识别以下几种日期格式

“yyyy-MM-dd’T’HH:mm:ss.SSSZ”;

“yyyy-MM-dd’T’HH:mm:ss.SSS’Z’”;

“yyyy-MM-dd”;

“EEE, dd MMM yyyy HH:mm:ss zzz”;

long类型的时间戳(毫秒时间戳)

解决办法有以下几种:

1.、采用long时间戳,如:1537191968000

2、在传参的对象上加上@JsonFormat注解并且指定时区

@JsonFormat(locale=“zh”, timezone=“GMT+8”, pattern=“yyyy-MM-dd HH:mm:ss”)
如果项目中使用json解析框架为fastjson框架,在实体字段上使用@JsonFormat注解格式化日期

@JsonFormat(shape=JsonFormat.Shape.STRING, pattern=“yyyy-MM-dd HH:mm:ss”)
3、采用全局处理方式统一处理,推荐这个做法,重写springboot默认转换

@Configuration
public class WebConfig {
    @Autowired
    private Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder;
 
    @Bean
    public MappingJackson2HttpMessageConverter MappingJsonpHttpMessageConverter() {
 
        ObjectMapper mapper = jackson2ObjectMapperBuilder.build();
 
        // ObjectMapper为了保障线程安全性,里面的配置类都是一个不可变的对象
        // 所以这里的setDateFormat的内部原理其实是创建了一个新的配置类
        DateFormat dateFormat = mapper.getDateFormat();
        mapper.setDateFormat(new MyDateFormat(dateFormat));
 
        MappingJackson2HttpMessageConverter mappingJsonpHttpMessageConverter = new MappingJackson2HttpMessageConverter(
                mapper);
        return mappingJsonpHttpMessageConverter;
    }
}
@Configuration
public class WebConfig {
    @Autowired
    private Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder;
 
    @Bean
    public MappingJackson2HttpMessageConverter MappingJsonpHttpMessageConverter() {
 
        ObjectMapper mapper = jackson2ObjectMapperBuilder.build();
 
        // ObjectMapper为了保障线程安全性,里面的配置类都是一个不可变的对象
        // 所以这里的setDateFormat的内部原理其实是创建了一个新的配置类
        DateFormat dateFormat = mapper.getDateFormat();
        mapper.setDateFormat(new MyDateFormat(dateFormat));
 
        MappingJackson2HttpMessageConverter mappingJsonpHttpMessageConverter = new MappingJackson2HttpMessageConverter(
                mapper);
        return mappingJsonpHttpMessageConverter;
    }
 }

参考https://blog.csdn.net/qq906627950/article/details/79503801

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值