SpringBoot中时间类型 序列化、反序列化、格式处理示例代码

网友投稿 1024 2023-04-24

SpringBoot中时间类型 序列化、反序列化、格式处理示例代码

SpringBoot中时间类型 序列化、反序列化、格式处理示例代码

【SpringBoot】 中时间类型 序列化、反序列化、格式处理

Date

yml全局配置

spring:

jackson:

time-zone: GMT+8

date-format: yyyy-MM-dd HH:mm:ss #配置POST请求Body中Date时间类型序列化格式处理,并返回

请求参数类型转换

/**

* 时间Date转换

* 配置GET请求,Query查询Date时间类型参数转换

*/

@Component

public class DateConverter implements Converter {

@Override

public Date convert(String source) {

if (StringUtils.isBlank(source)) {

return null;

}

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

return parseDate(source.trim(), "yyyy-MM-dd");

}

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

return parseDate(source.trim(), "yyyy-MM-dd HH:mm:ss");

}

throw new IllegalArgumentException("Invalid value '" + source + "'");

}

public Date parseDate(String dateStr, String format) {

Date date = null;

try {

date = new SimpleDateFormat(format).parse(dateStr);

} catch (ParseException e) {

log.warn("转换{}为日期(pattern={})错误!", dateStr, format);

}

return date;

}

}

JDK8-时间类型-LocalDateTime、LocalDate、LocalTime

/**

* 序列化,反序列化,格式处理

*

* @author zc

* @date 2020/7/9 01:42

*/

@Slf4j

@Configuration

public class JacksonCustomizerConfig {

@Value("${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}")

private String localDateTimePattern;

@Value("${spring.jackson.local-date-format:yyyy-MM-dd}")

private String localDatePattern;

@Value("${spring.jackson.local-time-format:HH:mm:ss}")

private String localTimePattern;

@Bean

public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer()http:// {

return builder -> {

builder.serializerByType(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(localDateTimePattern)));

builder.serializerByType(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(localDatePattern)));

builder.serializerByType(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(localTimePattern)));

builder.deserializerByType(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(localDateTimePattern)));

builder.deserializerByType(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(localDatePattern)));

builder.deserializerByType(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(localTimePattern)));

};

}

/**

* 时间LocalDateTime转换

*/

@Component

public static class LocalDateTimeConverter implements Converter {

@Override

public LocalDateTime convert(String source) {

if (StringUtils.isBlank(source)) {

return null;

}

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

return LocalDateTime.parse(source, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

}

throw new IllegalArgumentException("Invalid value '" + source + "'");

}

}

/**

* 时间LocalDate转换

*/

@Component

public static class LocalDateConverter implements Converter {

@Override

public LocalDate convert(String source) {

if (StringUtils.isBlank(source)) {

return null;

}

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

return LocalDate.parse(source, DateTimeFormatter.ofPattern("yyyy-MM-dd"));

}

throw new IllegalArgumentException("Invalid value '" + source + "'");

}

}

}

赵小胖个人博客:https://zcHiFSsc.happyloves-:4443/wordpress/

PS:springboot 时间类型配置

springboot 自带了jackson来处理时间,但不支持jdk8 LocalDate、LocalDateTime的转换。

对于Calendar、Date二种日期,转换方式有二种:

一、统一application.properties属性配置文件中加入

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

如果你使用了joda第三包下的时间类型,

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

此方法为全局格式,没办法处理差异化。

二、使用jackson的时间注解@jsonFormat(pattern="yyyy-MM-dd HH:mm:ss")

需要在每个日期类型上都添加,增加代码量,但更灵活性。

总结

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

上一篇:解决SpringBoot jar包中的文件读取问题实现
下一篇:mybatis 根据id批量删除的实现操作
相关文章

 发表评论

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