java全局处理Date和LocalDateTime,统一响应固定格式
引言: 在java开发中,用于接收或响应前端数据时,会定义相对应的字段类型,字段类型除了一些基础数据类型,对于时间类型,一般会使用Date,或者LocalDateTime,但是每次都需要在与前端进行交互时,对字段进行格式化,比较麻烦,以下为全局处理示例:
一、原有处理形式
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;public class YourEntity {// 对java.util.Date类型@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")private Date yourDate;// 对LocalDateTime类型@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime yourLocalDateTime;// getter和setter
}
二、全局处理
package com.config;import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.TimeZone;@Configuration
public class JacksonConfig {// 定义统一的日期格式public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";@Beanpublic MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {ObjectMapper objectMapper = new ObjectMapper();// 1. 配置时区objectMapper.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));// 2. 处理java.util.Date类型SimpleDateFormat dateFormat = new SimpleDateFormat(DEFAULT_DATE_TIME_FORMAT);objectMapper.setDateFormat(dateFormat);// 3. 处理Java 8日期时间类型(LocalDateTime等)JavaTimeModule javaTimeModule = new JavaTimeModule();// 序列化配置(后端到前端)javaTimeModule.addSerializer(LocalDateTime.class,new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)));// 反序列化配置(前端到后端)javaTimeModule.addDeserializer(LocalDateTime.class,new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)));objectMapper.registerModule(javaTimeModule);// 4. 关闭日期作为时间戳输出objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);// 5、忽略未知字段,避免JSON中存在多余字段时解析失败objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);return new MappingJackson2HttpMessageConverter(objectMapper);}
}
通过上述代码全局配置后,可以同时处理实体中字段类型为Date以及类型为LocalDateTime,达到统一时间格式返回前端,避免在每个时间字段上添加注解配置。