springboot全局日期格式化的两种方式

网友投稿 329 2022-11-24


springboot全局日期格式化的两种方式

方式一DnfybQ是配置参数

参数配置的方式就是在json序列化的时候,当字段为日期类型的时候的format类型,就相当于在所有日期字段上加了一个注解

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH: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-dd HH:mm:ss

第二中配置方式是properties文件配置

#jackson相关配置

spring.jackson.date-format = yyyy-MM-dd HH:mm:ss

#时区必须要设置

spring.jackson.time-zone= GMT+8

#ALWAYS的意思是即时属性为null,仍然也会输出这个key,对应yml里面的注释里面的类型

spring.jackson.default-property-inclusion=ALWAYS

方式二是自定义转换类

先定义一个string转date的转换类,需要实现convert接口

import org.apache.commons.lang.StringUtils;

import org.springframework.core.convert.converter.Converter;

import org.springframework.stereotype.Component;

import java.text.DateFormat;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

/**

* 全局handler前日期统一处理

* @author

* @date 2019-06-03

*/

@Component

public class DateConverterConfig implements Converter {

private static final List 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{

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

public Date convert(String source) {

if (StringUtils.isBlank(source)) {

return null;

}

source = source.trim();

if(source.matches("^\\d{4}-\\d{1,2}$")){

return parseDate(source, formarts.get(0));

}else if(source.matches("^\\d{4}-\\d{1,2}-http://\d{1,2}$")){

return parseDate(source, formarts.get(1));

}else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")){

return parseDate(source, formarts.get(2));

}else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")){

return parseDate(source, formarts.get(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 = dateFormat.parse(dateStr);

} catch (Exception e) {

throw new IllegalArgumentException(e.getLocalizedMessage());

}

return date;

}

}

第二步是把这个转换类添加到WebMvcConfigurationSupport

注意,当用户重新实现了WebMvcConfigurationSupport这个类之后,在yml中定义的静态资源路径啥的会失效,需要在这里再次添加一下静态资源路径

import org.springframework.context.annotation.Configuration;

import org.springframework.format.FormatterRegistry;

import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

@Configuration

public class WebMvcConfig extends WebMvcConfigurationSupport {

/**

* 添加自定义的Converters和Formatters.

*/

@Override

protected void addFormatters(FormatterRegistry registry) {

regihttp://stry.addConverter(new DateConverterConfig());

}

/**

* 如果继承了WebMvcConfigurationSupport,则在yml中配置的相关内容会失效。 需要重新指定静态资源

*

* @param registry

*/

@Override

public void addResourceHandlers(ResourceHandlerRegistry registry) {

registry.addResourceHandler("/**")

.addResourceLocations("classpath:/static/")

.addResourceLocations("classpath:/resources/")

.addResourceLocations("classpath:/META-INF/resources/");

super.addResourceHandlers(registry);

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java 和 Scala 如何调用变参
下一篇:Spring Security OAuth过期的解决方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~