springboot 自定义日期出入参

springboot 版本2.0.4,针对全局的日期出入参做一个详细的配置介绍,局部日期转换可采用@JsonFormat注解实现,本文不再赘述。

1.自定义日期入参

对于表单参数或get请求url后面跟着的日期入参,通过装配以下配置来实现日期入参转换:

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addFormatter(new DateFormatter("yyyy-MM-dd HH:mm:ss"));
    }
}

意思就是入参可传入yyyy-MM-dd HH:mm:ss格式的日期,框架会自动将该字符串映射到对应的Date入参字段上,例如http://localhost:8080/test?startTime=2019-06-27 10:59:59,后台会用Date startTime字段接收这个入参。

注意:startTime=2019-06-27 或 startTime=1561605650476等不满足的格式都会报错,另外,

通过继承的方式即extends WebMvcConfigurationSupport会导致autoConfig失效,可以通过implements WebMvcConfigurer的方式

假设前端入参传的是时间戳后端如何处理呢?

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new Long2DateConverter());
    }


    public class Long2DateConverter implements Converter<String, Date> {

        @Override
        public Date convert(String ts) {
            if (ts == null) {
                return null;
            }
            return new Date(Long.valueOf(ts));
        }
    }
}

此时需要自己实现一个转换器,注意,时间戳虽然在后端看来是个long类型,但是前端传过来依然是个String,所以转换器是从String->Date,而不能写Long->Date,否则会报错。

好了,上述方法只适用于表单参数和url参数,而json入参需要通过配置jackson来生效。

2.自定义出参

springboot默认采用的是jackson进行json转换,本文只阐述使用jackson的方式配置日期参数。

此处只介绍使用yml配置的方式,使用properties文件方式类似。配置如下:

spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
    serialization:
      write_dates_as_timestamps: false

对于json入参而言,需要满足yyyy-MM-dd HH:mm:ss格式才能正常转换,但实践发现,入参如果为时间戳也能自动转换(这里没有找到原因,毕竟没有看过源码),

对于json出参而言,日期返回到前端是yyyy-MM-dd HH:mm:ss格式的字符串。

另外,write_dates_as_timestamps属性决定返回的日期是否会被转换为时间戳,该属性默认为true,不配置该属性默认返回时间戳。

值得注意的是,write_dates_as_timestamps属性是归属于serialization属性下,即序列化属性,序列化的意思是代表从java对象->json串,也就是只作用于出参。所以该属性对入参无效。

 

3.总结

由于笔者并未阅读过springboot相关源码,所以以上阐述都是根据实际经验总结出来,只讨论怎么用,不深究为什么。

  • 对于form表单参数或url参数的日期格式,需要在implements WebMvcConfigurer的配置类中进行注册。两种方式:registry.addFormatter(new DateFormatter("yyyy-MM-dd HH:mm:ss"));和registry.addConverter(new Long2DateConverter());实现对标准日期串和时间戳入参的绑定;
  • jackson配置同时作用于json格式的日期入参和出参,标准日期串方式date-format: yyyy-MM-dd HH:mm:ss,write_dates_as_timestamps: false。时间戳方式write_dates_as_timestamps: true或不配置该属性
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个快速开发微服务的框架,它提供了大量的自动化配置和快速开发的工具。在Spring Boot中,我们可以使用Starter来快速集成一些常用的功能,如数据库、缓存、web等。而自定义Starter则可以让我们将自己的功能快速集成到Spring Boot中,下面是自定义Starter的流程: 1. 创建Maven项目 首先,我们需要创建一个Maven项目作为我们自定义Starter的项目。在项目的pom.xml中添加Spring Boot的依赖,以及其他需要集成的依赖。 2. 编写自动配置类 自动配置类是自定义Starter的核心,它负责将我们自定义的功能集成到Spring Boot中。在自动配置类中,我们可以使用@Conditional注解来判断是否需要进行配置。 3. 编写Starter类 Starter类是我们自定义Starter的入口,它负责将自动配置类注入到Spring容器中。在Starter类中,我们需要使用@EnableAutoConfiguration注解来启用自动配置。 4. 打包和发布Starter 当我们完成了自动配置类和Starter类的编写后,我们需要将自定义Starter打包成jar包,并发布到Maven仓库中,以便其他项目可以通过Maven依赖的方式使用我们的Starter。 5. 在项目中使用自定义Starter 在其他项目中使用自定义Starter非常简单,只需要在项目中的pom.xml中添加我们自定义Starter的依赖即可。Spring Boot会自动将我们的自定义Starter集成到项目中,并进行自动配置。 以上就是自定义Starter的流程,通过自定义Starter,我们可以将自己的功能快速集成到Spring Boot中,提高开发效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值