在我们前后端分离开发的项目中后端返回的VO(实体类)定义的实体类型是java.time.LocalDateTime但是前端想要接收一个String类型 那样我们可能需要定义一个重复的字段进行单独的转化 或者说前端给我们一个String类型 后端想要存入数据库是DateTime类型也需要进行转化,这样就会增加相同的代码,非常冗余,啰嗦!
那我们就可以定义一个通用配置类--------> 一劳永逸
package com.wuchuan.content.config;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@Configuration
public class LocalDateTimeConfig {
/*
* 序列化内容
* LocalDateTime -> String
* 服务端返回给客户端内容
* */
@Bean
public LocalDateTimeSerializer localDateTimeSerializer() {
return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
/*
* 反序列化内容
* String -> LocalDateTime
* 客户端传入服务端数据
* */
@Bean
public LocalDateTimeDeserializer localDateTimeDeserializer() {
return new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
// 配置
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
return builder -> {
builder.serializerByType(LocalDateTime.class, localDateTimeSerializer());
builder.deserializerByType(LocalDateTime.class, localDateTimeDeserializer());
};
}
}
还有个注解可以帮我们接收前端给后端的表示时间的字符串
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime legalCertDateStart;
@DateTimeFormat
是 Spring 框架中用于将字符串表示的日期时间转换为 LocalDateTime
对象的注解。
-
指定日期时间格式: 通过
pattern
属性,你可以指定期望的日期时间格式。在你的例子中,日期时间的格式是 "yyyy-MM-dd HH:mm:ss",表示年-月-日 时:分:秒的形式。 -
数据绑定: 当接收到请求参数时,Spring MVC 将尝试将请求中的日期时间字符串(例如,通过表单提交的字符串)转换为指定格式的
LocalDateTime
对象,并将其注入到对应的字段中。这是数据绑定的一部分,使得在控制器中能够方便地处理日期时间参数。
例如,如果你有一个表单,其中包含一个名为 legalCertDateStart
的输入字段,并用户输入了一个符合 "yyyy-MM-dd HH:mm:ss" 格式的日期时间字符串,Spring MVC 将尝试将这个字符串转换为 LocalDateTime
对象,并将其设置到 legalCertDateStart
字段上。