springboot全局日期格式化有两种方式
springboot全局日期格式化有两种方式
方式一是配置参数
参数配置的方式就是在json序列化的时候,当字段为日期类型的时候的format类型,就相当于在所有日期字段上加了一个注解
@JsonFormat(shape = , pattern = "yyyy-MM-dd HH:mm:ss"),但是每个字段都加注解太麻烦,所以直接使用全局配置来实现
参数配置也分为两种配置
第一种是yml的配置
spring:
jackson:
#参数意义:
# 默认
#.NON_DEFAULT 属性为默认值不序列化
#.NON_EMPTY 属性为 空(””) 或者为 NULL 都不序列化
#.NON_NULL 属性为NULL 不序列化
default-property-inclusion: ALWAYS
time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss
第二中配置方式是properties文件配置
#jackson相关配置
-format = yyyy-MM-dd HH:mm:ss
#时区必须要设置
-zone= GMT+8
#ALWAYS的意思是即时属性为null,仍然也会输出这个key,对应yml里面的注释里面的类型
-property-inclusion=ALWAYS
方式二是自定义转换类
先定义一个string转date的转换类,需要实现convert接口
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
/**
* 全局handler前日期统一处理
* @author
* @date 2019-06-03
*/
@Component
public class DateConverterConfig implements Converter<String, Date> {
private static final List<String> formarts = new ArrayList<>(4);
private static final String YYYY_MM = "yyyy-MM";
private static final String YYYY_MM_DD = "yyyy-MM-dd";
private static final String YYYY_MM_DD_HH_MM = "yyyy-MM-dd HH:mm";
private static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
static{
(YYYY_MM);
(YYYY_MM_DD);
(YYYY_MM_DD_HH_MM);
(YYYY_MM_DD_HH_MM_SS);
}
@Override
public Date convert(String source) {
if ((source)) {
return null;
}
source = ();
if(("^\\d{4}-\\d{1,2}$")){
return parseDate(source, (0));
}else if(("^\\d{4}-\\d{1,2}-\\d{1,2}$")){
return parseDate(source, (1));
}else if(("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")){
return parseDate(source, (2));
}else if(("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")){
return parseDate(source, (3));
}else {
throw new IllegalArgumentException("Invalid false value '" + source + "'");
}
}
/**
* 格式化日期
* @param dateStr String 字符型日期
* @param format String 格式
* @return Date 日期
*/
private Date parseDate(String dateStr, String format) {
Date date;
try {
DateFormat dateFormat = new SimpleDateFormat(format);
date = (dateStr);
} catch (Exception e) {
throw new IllegalArgumentException(());
}
return date;
}
}
第二步是把这个转换类添加到WebMvcConfigurationSupport
注意,当用户重新实现了WebMvcConfigurationSupport这个类之后,在yml中定义的静态资源路径啥的会失效,需要在这里再次添加一下静态资源路径
import ;
import ;
import ;
import ;
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
/**
* 添加自定义的Converters和Formatters.
*/
@Override
protected void addFormatters(FormatterRegistry registry) {
(new DateConverterConfig());
}
/**
* 如果继承了WebMvcConfigurationSupport,则在yml中配置的相关内容会失效。 需要重新指定静态资源
*
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
("/**")
.addResourceLocations("classpath:/static/")
.addResourceLocations("classpath:/resources/")
.addResourceLocations("classpath:/META-INF/resources/");
(registry);
}
}