SpringBoot幾種常用的接口日期格式化方法
全局時(shí)間格式化
通過(guò)在配置文件中設(shè)置可以實(shí)現(xiàn)全局時(shí)間格式化。在 Spring Boot 的配置文件 application.properties(或 application.yml)中添加以下兩行配置:
# 格式化全局時(shí)間字段 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss # 指定時(shí)間區(qū)域類型 spring.jackson.time-zone=GMT+8
實(shí)現(xiàn)原理分析:Controller 在返回?cái)?shù)據(jù)時(shí),會(huì)自動(dòng)調(diào)用 Spring Boot 框架中內(nèi)置的 JSON 框架 Jackson,對(duì)返回的數(shù)據(jù)進(jìn)行統(tǒng)一的 JSON 格式化處理。在處理過(guò)程中,它會(huì)判斷配置文件中是否設(shè)置了 “spring.jackson.date-format=yyyy-MM-dd HH:mm:ss”,如果設(shè)置了,那么 Jackson 框架在對(duì)時(shí)間類型的字段輸出時(shí)就會(huì)執(zhí)行時(shí)間格式化的處理,從而實(shí)現(xiàn)全局時(shí)間字段的格式化功能。
部分時(shí)間格式化
在某些場(chǎng)景下,不需要對(duì)全局的時(shí)間都進(jìn)行統(tǒng)一處理,可以使用注解的方式實(shí)現(xiàn)部分時(shí)間字段的格式化。在實(shí)體類 UserInfo 中添加 @JsonFormat 注解,實(shí)現(xiàn)代碼如下:
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@Data
public class UserInfo {
private int id;
private String username;
// 對(duì) createtime 字段進(jìn)行格式化處理
@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss", timezone = "GMT+8")
private Date createtime;
private Date updatetime;
}自定義參數(shù)轉(zhuǎn)換器
在 Spring Boot 中,可以使用自定義參數(shù)轉(zhuǎn)換器實(shí)現(xiàn)日期格式化。實(shí)現(xiàn) org.springframework.core.convert.converter.Converter接口,自定義參數(shù)轉(zhuǎn)換器,如下:
@Configuration
public class DateConverterConfig {
@Bean
public Converter<String, LocalDate> localDateConverter() {
return new Converter<String, LocalDate>() {
@Override
public LocalDate convert(String source) {
return LocalDate.parse(source, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
}
};
}
@Bean
public Converter<String, LocalDateTime> localDateTimeConverter() {
return new Converter<String, LocalDateTime>() {
@Override
public LocalDateTime convert(String source) {
return LocalDateTime.parse(source, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
};
}
}在使用自定義參數(shù)轉(zhuǎn)換器時(shí)可能會(huì)遇到一些問(wèn)題。例如,將匿名內(nèi)部類的寫法精簡(jiǎn)成 lambda 表達(dá)式的方式時(shí),啟動(dòng)項(xiàng)目可能會(huì)出現(xiàn)異常。原因是 lambda 表達(dá)式的接口是 Converter,不能得到具體的類型。解決辦法有兩種:一是不使用 lambda 表達(dá)式,老老實(shí)實(shí)使用匿名內(nèi)部類;二是等 requestMappingHandlerAdapter bean 注冊(cè)完成之后再添加自己的 converter,這樣就不會(huì)注冊(cè)到 FormattingConversionService中。
此外,還可以對(duì)前端傳遞的 string 進(jìn)行正則匹配,如 yyyy-MM-dd HH:mm:ss、yyyy-MM-dd、HH:mm:ss等,以適應(yīng)多種場(chǎng)景。
使用 Spring 注解
Spring 自帶注解 @DateTimeFormat可以進(jìn)行日期格式化。它通常用于將字符串格式的日期轉(zhuǎn)換為日期類型。在需要進(jìn)行日期格式轉(zhuǎn)換的 Date屬性上添加注解 @DateTimeFormat(pattern = "需要轉(zhuǎn)換的格式")。例如:
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date birthday;
使用 @DateTimeFormat注解時(shí)需要注意,pattern指定的格式是和傳入的參數(shù)的格式相對(duì)應(yīng)。如果格式不對(duì)應(yīng),可能會(huì)拋出異常。
使用 ControllerAdvice 配合 initBinder
在 controller 做環(huán)切時(shí),可以使用 initBinder進(jìn)行時(shí)間格式化。新建 InitBinderDateController類,進(jìn)行全局時(shí)間入?yún)⒏袷交?/p>
@ControllerAdvice
public class InitBinderDateController {
/**
* 將前臺(tái)傳遞過(guò)來(lái)的日期格式的字符串,自動(dòng)轉(zhuǎn)化為時(shí)間類型
* [攔截不到@RequestBody注解修飾的參數(shù)]
*/
@InitBinder("date")
public void initBinder(WebDataBinder binder) {
// Date 類型轉(zhuǎn)換
// DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// binder.registerCustomEditor(Date.class,new CustomDateEditor(dateFormat, true));
// System.out.println("test");
// LocalDateTime 類型轉(zhuǎn)換
binder.registerCustomEditor(LocalDateTime.class, new PropertyEditorSupport() {
@Override
public void setAsText(String text) {
if (!StringUtils.isEmpty(text)) {
setValue(LocalDateTime.parse(text, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
}
}
});
}
}后端全局設(shè)置
可以通過(guò)配置后端實(shí)現(xiàn)全局請(qǐng)求日期格式轉(zhuǎn)換。例如,在配置文件中配置:
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8或者使用配置類方式,適合前后端都是 json 格式交互。只需要用 @Configuration定義一個(gè)配置類,注入兩個(gè) Bean即可完成全局日期響應(yīng)格式化處理。
@Configuration
public class LocalDateTimeSerializerConfig {
private static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
@Bean
public LocalDateTimeSerializer localDateTimeSerializer() {
return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(YYYY_MM_DD_HH_MM_SS));
}
@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());
};
}
}接口輸出日期格式為時(shí)間戳
在 Spring Boot 中,實(shí)現(xiàn)接口輸出日期格式為時(shí)間戳的步驟如下:
- 配置日期格式化器:在 Spring Boot 的配置文件中,我們可以配置一個(gè)日期格式化器,將日期格式化為時(shí)間戳??梢栽?application.properties(或 application.yml)中添加以下配置:spring.mvc.format.date=unix。
- 定義實(shí)體類:我們首先需要定義一個(gè)實(shí)體類,用于表示需要輸出的日期字段:
public class MyEntity {
private Date date;
// getter and setter
}- 編寫控制器:接下來(lái),我們需要編寫一個(gè)控制器類,用于處理接口請(qǐng)求并返回日期字段的時(shí)間戳形式。我們可以使用 @JsonFormat注解來(lái)指定日期字段的格式化方式。下面是一個(gè)簡(jiǎn)單的示例:
@RestController
public class MyController {
@GetMapping("/entity")
public MyEntity getEntity() {
MyEntity entity = new MyEntity();
entity.setDate(new Date());
return entity;
}
}- 測(cè)試接口:?jiǎn)?dòng) Spring Boot 應(yīng)用后,我們可以通過(guò)訪問(wèn) /entity接口來(lái)獲取日期字段的時(shí)間戳形式??梢允褂?Postman 或?yàn)g覽器等工具進(jìn)行測(cè)試。
GET /entity HTTP/1.1
Host: localhost:8080
響應(yīng)結(jié)果將會(huì)是一個(gè) JSON 格式的對(duì)象,其中日期字段將以時(shí)間戳的形式表示。例如:
{
"date": 1678912345678
}到此這篇關(guān)于SpringBoot幾種常用的接口日期格式化方法的文章就介紹到這了,更多相關(guān)SpringBoot接口日期格式化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java 常見(jiàn)的限流算法詳細(xì)分析并實(shí)現(xiàn)
大數(shù)據(jù)量高并發(fā)訪問(wèn)時(shí),經(jīng)常出現(xiàn)服務(wù)或接口面對(duì)暴漲的請(qǐng)求而不可用的情況,甚至引發(fā)連鎖反映導(dǎo)致整個(gè)系統(tǒng)崩潰。此時(shí)你需要使用的技術(shù)手段之一就是限流,當(dāng)請(qǐng)求達(dá)到一定的并發(fā)數(shù)或速率,就進(jìn)行等待、排隊(duì)、降級(jí)、拒絕服務(wù)等。限流時(shí),常見(jiàn)算法是計(jì)數(shù)器、漏斗、令牌桶算法2022-04-04
java必學(xué)必會(huì)之方法的重載(overload)
java必學(xué)必會(huì)之方法的重載,介紹了方法的重載、構(gòu)造方法的重載,想要學(xué)好java方法的重載的朋友一定要好好閱讀這篇文章2015-12-12
MyBatis-Plus 邏輯刪除的實(shí)現(xiàn)示例
邏輯刪除通過(guò)標(biāo)記字段實(shí)現(xiàn)數(shù)據(jù)“假刪除”,既保障了數(shù)據(jù)安全,又簡(jiǎn)化了恢復(fù)操作,是核心業(yè)務(wù)數(shù)據(jù)的最佳刪除方案,下面就來(lái)介紹一下MyBatis-Plus邏輯刪除的實(shí)現(xiàn),感興趣的可以了解一下2026-01-01
Spring Boot參數(shù)校驗(yàn)及分組校驗(yàn)的使用教程
在日常的開(kāi)發(fā)中,參數(shù)校驗(yàn)是非常重要的一個(gè)環(huán)節(jié),嚴(yán)格參數(shù)校驗(yàn)會(huì)減少很多出bug的概率,增加接口的安全性,下面這篇文章主要給大家介紹了關(guān)于Spring Boot參數(shù)校驗(yàn)及分組校驗(yàn)使用的相關(guān)資料,需要的朋友可以參考下2021-08-08
利用ssh實(shí)現(xiàn)服務(wù)器文件上傳下載
這篇文章主要為大家詳細(xì)介紹了如何利用ssh實(shí)現(xiàn)服務(wù)器文件上傳下載,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09
Spring Boot自定義配置實(shí)現(xiàn)IDE自動(dòng)提示功能
這篇文章主要介紹了Spring Boot自定義配置實(shí)現(xiàn)IDE自動(dòng)提示功能,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08
feign調(diào)用中文參數(shù)被encode編譯的問(wèn)題
這篇文章主要介紹了feign調(diào)用中文參數(shù)被encode編譯的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03

