SpringBoot利用jackson格式化時間的三種方法
在實(shí)際開發(fā)中我們經(jīng)常會與時間打交道,那這就會涉及到一個時間格式轉(zhuǎn)換的問題。接下來會介紹幾種在SpirngBoot中如何對時間格式進(jìn)行轉(zhuǎn)換。
準(zhǔn)備工作創(chuàng)建項目,添加依賴
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
創(chuàng)建實(shí)體類UserDTO
添加屬性,get、set方法省略。
private String id;private String username;private Date createTime;
創(chuàng)建UserController
編寫控制層代碼
@RestControllerpublic class UserController { @GetMapping('/getUser') public List<UserDTO> getUser() {List<UserDTO> userList = new ArrayList<UserDTO>();for (int i=1; i<=3; i++) { UserDTO user = new UserDTO(); user.setCreateTime(new Date()); user.setUsername('gongj' + i); user.setId('j' + i); userList.add(user);}return userList; } }
調(diào)用接口:http://localhost:8080/getUser
該結(jié)果很顯然不是我們所需要的,所以我們需要進(jìn)行時間格式化一下。而且還有時區(qū)問題,我當(dāng)前時間是晚上 22:44。
第一種 使用注解在需要轉(zhuǎn)換的字段上增加 @JsonFormat注解,該注解是 jackson的,web 包集成了。
import com.fasterxml.jackson.annotation.JsonFormat;private String id;private String username; @JsonFormat(pattern = 'yyyy-MM-dd HH:mm:ss',timezone = 'GMT+8')private Date createTime;
pattern:需要轉(zhuǎn)換的時間日期的格式
timezone:時間設(shè)置為東八區(qū),避免時間在轉(zhuǎn)換中有誤差
調(diào)用接口:http://localhost:8080/getUser
完成,但是這種也有不好的地方,如果我有一百個實(shí)體中都有 Date類型,那就要在一百個實(shí)體加入注解。顯得有點(diǎn)麻煩。
第二種 修改默認(rèn)配置所有的json生成都離不開相關(guān)的HttpMessageConverters
SpringBoot 默認(rèn)使用 jackson,并對其默認(rèn)做了配置。所以我們來修改一下。
全局搜索 JacksonHttpMessageConvertersConfiguration。idea快捷鍵:Ctrl + shift + r
該類中有個方法mappingJackson2HttpMessageConverter 就是用來處理json的。
@Bean@ConditionalOnMissingBean(value = {MappingJackson2HttpMessageConverter.class},ignoredType = {'org.springframework.hateoas.server.mvc.TypeConstrainedMappingJackson2HttpMessageConverter', 'org.springframework.data.rest.webmvc.alps.AlpsJsonHttpMessageConverter'})MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(ObjectMapper objectMapper) {return new MappingJackson2HttpMessageConverter(objectMapper);}
注意該方法上有兩個注解,@Bean 注解就不在介紹了。介紹一下 ConditionalOnMissingBean注解。
@ConditionalOnMissingBean :當(dāng)給定的在bean不存在時,則實(shí)例化當(dāng)前 Bean。
打個比喻:你入職報到,你公司看你帶了電腦,就讓你使用你自己的電腦,如果你沒帶電腦,就讓你使用公司的電腦。SpringBoot 也是這樣子做的,你不提供,就使用默認(rèn)的。
新建MyConfig
import java.text.SimpleDateFormat;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import com.fasterxml.jackson.databind.ObjectMapper;@Configurationpublic class MyConfig { @Bean MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverterConfiguration() {MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();ObjectMapper om = new ObjectMapper();//全局修改josn時間格式om.setDateFormat(new SimpleDateFormat('yyyy/MM/dd HH:mm:ss'));converter.setObjectMapper(om);return converter; }}
提供了一個 MappingJackson2HttpMessageConverter的 Bean ,所以Springboot就會使用我們所提供的。
將User實(shí)體的注解注釋
調(diào)用接口:http://localhost:8080/getUser
OK,這種方式也是可以的。
提供ObjectMapper
也可以提供一個 ObjectMapper,將上述提供的 MappingJackson2HttpMessageConverter進(jìn)行注釋掉。
import java.text.SimpleDateFormat;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import com.fasterxml.jackson.databind.ObjectMapper;@BeanObjectMapper objectMapper() {ObjectMapper om = new ObjectMapper();om.setDateFormat(new SimpleDateFormat('yyyy-MM-dd'));return om;}
調(diào)用接口:http://localhost:8080/getUser
注意:上述兩種方法都是全局修改的哦!
第三種 配置文件修改在 application.yml或者properties中修改默認(rèn)配置
yml
spring: jackson: date-format: yyyy/MM/dd timezone: GMT+8
properties
spring.jackson.date-format=yyyy-MM-dd HH:mmspring.jackson.time-zone=GMT+8
如果第二種方式和第三種方式配置同時存在,以第二種方式為主。
如果三種方式都存在的時候,以實(shí)體類中注解格式為主。
總結(jié)到此這篇關(guān)于SpringBoot利用jackson格式化時間的文章就介紹到這了,更多相關(guān)SpringBoot jackson格式化時間內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. ASP基礎(chǔ)入門第三篇(ASP腳本基礎(chǔ))2. 詳解CSS不定寬溢出文本適配滾動3. Python實(shí)現(xiàn)查找數(shù)據(jù)庫最接近的數(shù)據(jù)4. python中if嵌套命令實(shí)例講解5. 使用css實(shí)現(xiàn)全兼容tooltip提示框6. CSS自定義滾動條樣式案例詳解7. Java之JSP教程九大內(nèi)置對象詳解(中篇)8. PHP與已存在的Java應(yīng)用程序集成9. 使用ProcessBuilder調(diào)用外部命令,并返回大量結(jié)果10. python b站視頻下載的五種版本
