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

版权申明:本文为原创文章,转载请注明原文出处

原文链接:https://blog.it-follower.com/posts/1845566524.html

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

接收参数自动绑定

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class StringToDateConverter implements Converter<String, Date> {

@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、注册该转化器

1
2
3
4
5
6
7
8
@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。

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

返回结果自动格式化

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

总结

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

评论