1.需求
后端日期時(shí)間對(duì)象,是LocalDateTime類型,直接返回前端,是數(shù)組形式
希望以正常的日期時(shí)間字符串格式返回
2.思路
1.@JsonFormat注解
2.消息轉(zhuǎn)化器
3.解決方案
3.1 使用注解(不推薦)
在實(shí)體類的LocalDateTime屬性上面,添加注解
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
缺點(diǎn): 每個(gè)日期時(shí)間屬性都要添加,麻煩
3.2 擴(kuò)展SpringMVC框架的消息轉(zhuǎn)化器,實(shí)現(xiàn)返回日期時(shí)間的格式化(推薦)
3.2.1 配置類: config.WebMvcConfiguration
該config已實(shí)現(xiàn)了登錄攔截器,和knife4j生成接口文檔、靜態(tài)資源映射(已從代碼中刪除),
現(xiàn)添加時(shí)間按格式轉(zhuǎn)換功能extendMessageConverters
/**
* 配置類,注冊(cè)web層相關(guān)組件
*/
@Configuration
@Slf4j
public class WebMvcConfiguration extends WebMvcConfigurationSupport {
//擴(kuò)展SpringMVC框架的消息轉(zhuǎn)化器,例如實(shí)現(xiàn)返回日期時(shí)間的格式化
@Override
protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
log.info("擴(kuò)展消息轉(zhuǎn)換器");
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
//將java對(duì)象序列化為json數(shù)據(jù),為消息轉(zhuǎn)換器設(shè)置序列轉(zhuǎn)換器
converter.setObjectMapper(new JacksonObjectMapper());
//將自己的消息轉(zhuǎn)換器加入容器中
converters.add(0, converter);
}
}
思路:參數(shù)獲取到當(dāng)前的消息轉(zhuǎn)換器列表converters
,將我們自定義的消息轉(zhuǎn)化器convert
添加到converters
中,而且要添加到首位,讓它優(yōu)先生效
3.2.2 JacksonObjectMapper類的定義
顯然是個(gè)工具類,位于sky-common模塊的json.JacksonObjectMapper
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;
/**
* 對(duì)象映射器:基于jackson將Java對(duì)象轉(zhuǎn)為json,或者將json轉(zhuǎn)為Java對(duì)象
* 將JSON解析為Java對(duì)象的過程稱為 [從JSON反序列化Java對(duì)象]
* 從Java對(duì)象生成JSON的過程稱為 [序列化Java對(duì)象到JSON]
*/
public class JacksonObjectMapper extends ObjectMapper {
public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final String DATE_TIME_FORMAT_NO_SECOND = "yyyy-MM-dd HH:mm";
public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";
public JacksonObjectMapper() {
super();
//收到未知屬性時(shí)不報(bào)異常
this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);
//反序列化時(shí),屬性不存在的兼容處理
this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
SimpleModule simpleModule = new SimpleModule()
.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)))
.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));
//注冊(cè)功能模塊 例如,可以添加自定義序列化器和反序列化器
this.registerModule(simpleModule);
}
}
簡(jiǎn)單分析: 先反序列化,再序列化
優(yōu)勢(shì): 一次配置,重復(fù)使用,不需要每個(gè)實(shí)體類的時(shí)間屬性上加注解了
3.2.3 效果
文章來源:http://www.zghlxwxcb.cn/news/detail-849574.html
和使用注解是一樣的文章來源地址http://www.zghlxwxcb.cn/news/detail-849574.html
到了這里,關(guān)于Springboot中LocalDateTime對(duì)象返回給前端,格式化的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!