Spring时间处理
入参处理
入参在POST请求时,Spring会默认序列化字符串时间到LocalDateTime系列。
入参在GET请求时,Spring默认不处理,需要在参数上写@DateTimeFormat
注解。
可以通过统一处理
/***
* Date日期类型转换器
*/
@Bean
public Formatter<Date> dateFormatter() {
return new Formatter<Date>() {
@Override
public Date parse(String text, Locale locale) {
SimpleDateFormat sdf = new SimpleDateFormat(Dateutils.DATE_FORMAT_FULL);
Date date = null;
try {
date = sdf.parse(text);
} catch (Exception e) {
e.printStackTrace();
}
return date;
}
@Override
public String print(Date object, Locale locale) {
SimpleDateFormat sdf = new SimpleDateFormat(Dateutils.DATE_FORMAT_FULL);
return sdf.format(object);
}
};
}
@Bean
public Formatter<LocalDate> localDateFormatter() {
return new Formatter<LocalDate>() {
@Override
public LocalDate parse(String text, Locale locale) {
return LocalDate.parse(text, DateTimeFormatter.ISO_LOCAL_DATE);
}
@Override
public String print(LocalDate object, Locale locale) {
return DateTimeFormatter.ISO_LOCAL_DATE.format(object);
}
};
}
@Bean
public Formatter<LocalDateTime> localDateTimeFormatter() {
return new Formatter<LocalDateTime>() {
@Override
public String print(LocalDateTime localDateTime, Locale locale) {
return DateTimeFormatter.ofPattern(Dateutils.DATE_FORMAT_FULL).format(localDateTime);
}
@Override
public LocalDateTime parse(String text, Locale locale) {
return LocalDateTime.parse(text, DateTimeFormatter.ofPattern(Dateutils.DATE_FORMAT_FULL));
}
};
}
@Bean
public Formatter<LocalTime> localTimeFormatter() {
return new Formatter<LocalTime>() {
@Override
public String print(LocalTime localTime, Locale locale) {
return DateTimeFormatter.ofPattern(Dateutils.DATE_FORMAT_HMS).format(localTime);
}
@Override
public LocalTime parse(String text, Locale locale) {
return LocalTime.parse(text, DateTimeFormatter.ofPattern(Dateutils.DATE_FORMAT_HMS));
}
};
}
出参处理
出参LocalDateTime时间需要写@JsonFormat(pattern = Dateutils.DATE_FORMAT_FULL)
处理,可以通过增加统一配置处理
@Bean
public Jackson2ObjectMapperBuilderCustomizer customizer() {
return builder -> {
builder.locale(Locale.CHINA);
builder.timeZone(TimeZone.getTimeZone(ZoneId.systemDefault()));
builder.simpleDateFormat("yyyy-MM-dd HH:mm:ss");
JavaTimeModule javaTimeModule = new JavaTimeModule();
javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss")));
javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern("HH:mm:ss")));
builder.modules(javaTimeModule);
};
}