springboot全局日期格式化的两种方式
方式一是配置参数
参数配置的方式就是在json序列化的时候,当字段为日期类型的时候的format类型,就相当于在所有日期字段上加了一个注解
@JsonFormat(shape=JsonFormat.Shape.STRING,pattern="yyyy-MM-ddHH:mm:ss"),但是每个字段都加注解太麻烦,所以直接使用全局配置来实现
参数配置也分为两种配置
第一种是yml的配置
spring: jackson: #参数意义: #JsonInclude.Include.ALWAYS默认 #JsonInclude.Include.NON_DEFAULT属性为默认值不序列化 #JsonInclude.Include.NON_EMPTY属性为空(””)或者为NULL都不序列化 #JsonInclude.Include.NON_NULL属性为NULL不序列化 default-property-inclusion:ALWAYS time-zone:GMT+8 date-format:yyyy-MM-ddHH:mm:ss
第二中配置方式是properties文件配置
#jackson相关配置 spring.jackson.date-format=yyyy-MM-ddHH:mm:ss #时区必须要设置 spring.jackson.time-zone=GMT+8 #ALWAYS的意思是即时属性为null,仍然也会输出这个key,对应yml里面的注释里面的类型 spring.jackson.default-property-inclusion=ALWAYS
方式二是自定义转换类
先定义一个string转date的转换类,需要实现convert接口
importorg.apache.commons.lang.StringUtils; importorg.springframework.core.convert.converter.Converter; importorg.springframework.stereotype.Component; importjava.text.DateFormat; importjava.text.SimpleDateFormat; importjava.util.ArrayList; importjava.util.Date; importjava.util.List; /** *全局handler前日期统一处理 *@author *@date2019-06-03 */ @Component publicclassDateConverterConfigimplementsConverter{ privatestaticfinalList formarts=newArrayList<>(4); privatestaticfinalStringYYYY_MM="yyyy-MM"; privatestaticfinalStringYYYY_MM_DD="yyyy-MM-dd"; privatestaticfinalStringYYYY_MM_DD_HH_MM="yyyy-MM-ddHH:mm"; privatestaticfinalStringYYYY_MM_DD_HH_MM_SS="yyyy-MM-ddHH:mm:ss"; static{ formarts.add(YYYY_MM); formarts.add(YYYY_MM_DD); formarts.add(YYYY_MM_DD_HH_MM); formarts.add(YYYY_MM_DD_HH_MM_SS); } @Override publicDateconvert(Stringsource){ if(StringUtils.isBlank(source)){ returnnull; } source=source.trim(); if(source.matches("^\\d{4}-\\d{1,2}$")){ returnparseDate(source,formarts.get(0)); }elseif(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")){ returnparseDate(source,formarts.get(1)); }elseif(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}{1}\\d{1,2}:\\d{1,2}$")){ returnparseDate(source,formarts.get(2)); }elseif(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}{1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")){ returnparseDate(source,formarts.get(3)); }else{ thrownewIllegalArgumentException("Invalidfalsevalue'"+source+"'"); } } /** *格式化日期 *@paramdateStrString字符型日期 *@paramformatString格式 *@returnDate日期 */ privateDateparseDate(StringdateStr,Stringformat){ Datedate; try{ DateFormatdateFormat=newSimpleDateFormat(format); date=dateFormat.parse(dateStr); }catch(Exceptione){ thrownewIllegalArgumentException(e.getLocalizedMessage()); } returndate; } }
第二步是把这个转换类添加到WebMvcConfigurationSupport
注意,当用户重新实现了WebMvcConfigurationSupport这个类之后,在yml中定义的静态资源路径啥的会失效,需要在这里再次添加一下静态资源路径
importorg.springframework.context.annotation.Configuration; importorg.springframework.format.FormatterRegistry; importorg.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; importorg.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; @Configuration publicclassWebMvcConfigextendsWebMvcConfigurationSupport{ /** *添加自定义的Converters和Formatters. */ @Override protectedvoidaddFormatters(FormatterRegistryregistry){ registry.addConverter(newDateConverterConfig()); } /** *如果继承了WebMvcConfigurationSupport,则在yml中配置的相关内容会失效。需要重新指定静态资源 * *@paramregistry */ @Override publicvoidaddResourceHandlers(ResourceHandlerRegistryregistry){ registry.addResourceHandler("/**") .addResourceLocations("classpath:/static/") .addResourceLocations("classpath:/resources/") .addResourceLocations("classpath:/META-INF/resources/"); super.addResourceHandlers(registry); } }
到此这篇关于springboot全局日期格式化的两种方式的文章就介绍到这了,更多相关springboot全局日期格式化内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。