建立項目,新增依賴
<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
完成,但這種也有不好的地方,如果我有一百個實體中都有Date類型,那就要在一百個實體加入註解。顯得有點麻煩。
所有的json產生都離不開相關的HttpMessageConverters
SpringBoot 預設使用jackson,並對其預設做了配置。所以我們來修改一下。
全域搜尋 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 :當給定的在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實體的註解註解
#呼叫介面:http://localhost:8080/getUser
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
#注意:上述兩種方法都是全域修改的喔!
在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中文網其他相關文章!