Java前后端实现Date、LocalDateTime与时间戳转换
1、Date与时间戳转换
1、实体类:
实体类中,时间类型字段使用Date 类型
修饰。
public class User implements Serializable { private static final long serialVersionUID = 621747518161198596L; / * 用户id */ private String id; / * 用户名称 */ private String name;/ * 创建时间 */ private Date createTime; / * 更新时间 */ private Date updateTime;}
2、配置转换器:
目的是将,接收到前端时间戳,转换为Date类型.
public class TimeStampToDateConverter implements Converter<String, Date> { @Override public Date convert(String text) { Date date = null; if (StringUtils.isNotEmpty(text)) { date = new Date(Long.parseLong(text)); } return date; }}
3、注册转换器:
通过继承WebMvcConfigurationSupport
类,重写addFormatters
方法
@Configurationpublic class WebMvcRegistrationsConfig extends WebMvcConfigurationSupport {.../ * 添加自定义消息转换器 */ @Override protected void addFormatters(FormatterRegistry registry) { // 添加时间戳转日期类型消息转换器 registry.addConverter(new TimeStampToDateConverter()); }...}
4、配置yaml:
spring: #统一时间返回格式 jackson: #date-format: yyyy-MM-dd HH:mm:ss #返回时间戳时不进行格式化 time-zone: GMT+8 serialization: write-dates-as-timestamps: true #是否返回时间戳
2、LocalDateTime与时间戳转换
1、实体类:
实体类中,时间类型字段使用LocalDateTime类型
修饰。
public class User implements Serializable { private static final long serialVersionUID = 621747518161198596L; / * 用户id */ private String id; / * 用户名称 */ private String name;/ * 创建时间 */ private LocalDateTimecreateTime; / * 更新时间 */ private LocalDateTimeupdateTime;}
2、配置转换器:
import com.fasterxml.jackson.core.JsonGenerator;import com.fasterxml.jackson.core.JsonParser;import com.fasterxml.jackson.databind.*;import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Primary;import java.io.IOException;import java.time.Instant;import java.time.LocalDateTime;import java.time.ZoneId;@Configurationpublic class LocalDateTimeSerializerConfig { / * 序列化LocalDateTime * * @return */ @Bean @Primary public ObjectMapper serializingObjectMapper() { ObjectMapper objectMapper = new ObjectMapper(); JavaTimeModule javaTimeModule = new JavaTimeModule(); javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer()); javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer()); objectMapper.registerModule(javaTimeModule); return objectMapper; } / * 序列化实现 */ public static class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> { @Override public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException { if (value != null) { long timestamp = value.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); gen.writeNumber(timestamp); } } } / * 反序列化实现 */ public static class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> { @Override public LocalDateTime deserialize(JsonParser p, DeserializationContext deserializationContext) throws IOException { long timestamp = p.getValueAsLong(); if (timestamp > 0) { return LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneId.systemDefault()); } else { return null; } } }}
3、注册转换器:
通过继承WebMvcConfigurationSupport
类,重写extendMessageConverters
方法
@Configurationpublic class WebMvcRegistrationsConfig extends WebMvcConfigurationSupport { // 注入ObjectMapper @Resource private ObjectMapper serializingObjectMapper;.../ * 添加自定义消息转换器 */ @Override public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); converter.setObjectMapper(serializingObjectMapper); converters.add(0, converter); }...}