首頁  >  文章  >  Java  >  SpringBoot怎麼利用jackson格式化時間

SpringBoot怎麼利用jackson格式化時間

WBOY
WBOY轉載
2023-05-25 20:34:041062瀏覽

準備工作

建立項目,新增依賴

<dependency>
	<groupid>org.springframework.boot</groupid>
	<artifactid>spring-boot-starter-web</artifactid>
</dependency>

建立實體類別UserDTO

新增屬性,get、set方法省略。

private String id;
private String username;
private Date createTime;

建立UserController

編寫控制層程式碼

@RestController
public class UserController {
    @GetMapping("/getUser")
    public List<userdto> getUser() {
        List<userdto> userList = new ArrayList<userdto>();
        for (int i=1; i<p>呼叫介面:http://localhost:8080/getUser</p>
<p><img src="https://img.php.cn/upload/article/000/887/227/168501804652134.png" alt="SpringBoot怎麼利用jackson格式化時間"></p> <p>該結果很顯然不是我們所需要的,所以我們需要進行時間格式化一下。而且還有時區問題,我目前時間是晚上 22:44。 </p>
<h4>第一種 使用註解<br>
</h4>
<p>在需要轉換的欄位上增加 @JsonFormat註解,這個註解是  jackson的,web 套件整合了。 </p>
<pre class="brush:php;toolbar:false">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:需要轉換的時間日期的格式

timezone:時間設定為東八區,避免時間在轉換中有誤差

呼叫介面:http:/ /localhost:8080/getUser

SpringBoot怎麼利用jackson格式化時間

完成,但這種也有不好的地方,如果我有一百個實體中都有Date類型,那就要在一百個實體加入註解。顯得有點麻煩。

第二種修改預設配置

所有的json產生都離不開相關的HttpMessageConverters

SpringBoot 預設使用jackson,並對其預設做了配置。所以我們來修改一下。

全域搜尋 JacksonHttpMessageConvertersConfiguration。 idea快捷鍵:Ctrl shift r

SpringBoot怎麼利用jackson格式化時間

該類別中有個方法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 :當給定的在bean不存在時,則實例化目前 Bean。

打個比喻:你入職報到,你公司看你帶了電腦,就讓你使用你自己的電腦,如果你沒帶電腦,就讓你使用公司的電腦。 SpringBoot 也是這樣子做的,你不提供,就用預設的。

新建MyConfig

import java.text.SimpleDateFormat;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.fasterxml.jackson.databind.ObjectMapper;

@Configuration
public 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實體的註解註解

SpringBoot怎麼利用jackson格式化時間

#呼叫介面:http://localhost:8080/getUser

SpringBoot怎麼利用jackson格式化時間

OK,這種方式也是可以的。

提供ObjectMapper

也可以提供一個 ObjectMapper,將上述提供的 MappingJackson2HttpMessageConverter進行註解掉。

import java.text.SimpleDateFormat;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.fasterxml.jackson.databind.ObjectMapper;
@Bean
ObjectMapper objectMapper() {
	ObjectMapper om = new ObjectMapper();
	om.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
	return om;
}

呼叫介面:http://localhost:8080/getUser

SpringBoot怎麼利用jackson格式化時間

#注意:上述兩種方法都是全域修改的喔!

第三種設定檔修改

在application.yml或properties中修改預設設定

yml

spring: 
  jackson: 
    date-format: yyyy/MM/dd
    timezone: GMT+8

properties

spring.jackson.date-format=yyyy-MM-dd HH:mm
spring.jackson.time-zone=GMT+8

如果第二種方式和第三種方式配置同時存在,以第二種方式為主。

如果三種方式都存在的時候,以實體類別中註解格式為主。

以上是SpringBoot怎麼利用jackson格式化時間的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除