Springboot中LocalDateTime對(duì)象返回給前端格式化解決方案
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 效果
和使用注解是一樣的
總結(jié)
到此這篇關(guān)于Springboot中LocalDateTime對(duì)象返回給前端格式化解決方案的文章就介紹到這了,更多相關(guān)LocalDateTime對(duì)象返回前端格式化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java開源調(diào)度如何給xxljob加k8s執(zhí)行器
這篇文章主要介紹了java開源調(diào)度如何給xxljob加一個(gè)k8s執(zhí)行器,?xxljob?在設(shè)計(jì)上,抽象出了執(zhí)行器的接口,所以實(shí)現(xiàn)一個(gè)語言的執(zhí)行器并不復(fù)雜,這里主要探索下,如何利用k8s的pod?的能力,使用?xxljob?調(diào)度?pod?運(yùn)行,實(shí)現(xiàn)一個(gè)通用的和語言無關(guān)的執(zhí)行器2022-02-02MyBatis實(shí)現(xiàn)動(dòng)態(tài)SQL更新的代碼示例
本文博小編將帶領(lǐng)大家學(xué)習(xí)如何利用 MyBatis 攔截器機(jī)制來優(yōu)雅的實(shí)現(xiàn)這個(gè)需求,文中通過代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2023-07-07基于FeignException$InternalServerError的解決方案
這篇文章主要介紹了FeignException$InternalServerError的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06Spring AOP中的JDK和CGLib動(dòng)態(tài)代理哪個(gè)效率更高?
今天小編就為大家分享一篇關(guān)于Spring AOP中的JDK和CGLib動(dòng)態(tài)代理哪個(gè)效率更高?,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03mybatis攔截器實(shí)現(xiàn)數(shù)據(jù)庫數(shù)據(jù)權(quán)限隔離方式
通過Mybatis攔截器,在執(zhí)行SQL前添加條件實(shí)現(xiàn)數(shù)據(jù)權(quán)限隔離,特別是對(duì)于存在用戶ID區(qū)分的表,攔截器會(huì)自動(dòng)添加如user_id=#{userId}的條件,確保SQL在執(zhí)行時(shí)只能操作指定用戶的數(shù)據(jù),此方法主要應(yīng)用于Mybatis的四個(gè)階段2024-11-11SpringBoot @PropertySource與@ImportResource有什么區(qū)別
這篇文章主要介紹了SpringBoot @PropertySource與@ImportResource有什么區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01Java計(jì)時(shí)新姿勢(shì)StopWatch的使用方法詳解
這篇文章主要給大家介紹了關(guān)于Java計(jì)時(shí)新姿勢(shì)StopWatch的相關(guān)資料,以及java 中使用StopWatch來計(jì)算時(shí)間差的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-01-01