SpringBoot全局配置日期类型参数Date自动绑定,返回结果自动格式化

网上的说法有很多,但都不太全面,本文是通过自己实践后,总结出来的处理方式。自定绑定和自动格式化是两种不同的处理,所以需要针对这两个进行配置,以springboot自带的jackson为例

一、接收参数自动绑定

1、配置一个String转Date的转化器

public class StringToDateConverter implements Converter {

    @Override
    public Date convert(String source) {
        Date target = null;
        if(!StringUtils.isEmpty(source)) {
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            try {
                target =  format.parse(source);
            } catch (ParseException e) {
                throw new RuntimeException(String.format("parser %s to Date fail", source));
            }
        }
        return target;
    }
}

2、注册该转化器

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new StringToDateConverter());
    }
}

完成以上两步即可完成普通参数的自动绑定。

在项目中有一种特殊情况是,我们用@RequestBody来接收参数,这时候springboot会使用MappingJackson2HttpMessageConverter来格式化时间,我们还需针对这种情况特殊配置,只需在yml中配置jackson的date-format即可。另外,返回结果时,由于时区问题,可能差8小时,还需配上time-zone。

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

二、返回结果自动格式化

返回对象时,springboot默认使用的同样是MappingJackson2HttpMessageConverter,配置和上述一致

总结

springboot在接收参数和返回结果时,采用的不同的方式。而且接收普通参数,和接收RequestBody里的参数,也是不同的处理,因为要完全实现入参自动绑定、结果自动格式化,需要配置上述两个地方。

你可能感兴趣的:(SpringBoot,Date参数,自动绑定,格式化)