基于@JsonFormat的導(dǎo)包問題
@JsonFormat導(dǎo)包問題
@DateTimeFormat(pattern = "yyyy-MM-dd hh:mm:ss")//注解可以以該格式注入格式 @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")//輸出格式 private Date birthday;//出生日期',
在后臺(tái)像前臺(tái)傳參數(shù)時(shí),日期沒有格式化,網(wǎng)上搜索了,輸出用@JsonFormat但是沒說用哪個(gè)包
下面是我脫坑之路:
import com.fasterxml.jackson.annotation.JsonFormat; import org.springframework.format.annotation.DateTimeFormat; <!-- JSON: jackson --> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> <version>1.9.12</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-lgpl</artifactId> <version>1.9.12</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.0</version> </dependency>
問題補(bǔ)充:
我想要的是返回給前臺(tái)的時(shí)間已經(jīng)格式化,然而上面并沒有解決我的問題于是:
方法如下:
單獨(dú)寫一個(gè)處理類繼承JsonSerializer
package com.szch.aspect;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.SerializerProvider;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 格式化Response時(shí)間格式
* 在springmvc返回json數(shù)據(jù)的時(shí)候默認(rèn)日期字段顯示的是long類型的時(shí)間戳
* 如果想要返回格式化的日期如:yyyy-MM-dd這種格式的需要進(jìn)行出現(xiàn)
*/
public class CustomDateSerializer extends JsonSerializer<Date> {
public void serialize(Date value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
jsonGenerator.writeString(sdf.format(value));
}
}
在實(shí)體類的屬性字段上添加@JsonSerialize注解
@DateTimeFormat(pattern = "yyyy-MM-dd hh:mm:ss")//注解可以以該格式注入格式 @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")//輸出格式 @JsonSerialize(using = CustomDateSerializer.class) private Date lastLogin;//最后登錄時(shí)間',
結(jié)果OK了,postman返回~

使用@JsonFormat注解踩過的坑
一、背景描述
項(xiàng)目技術(shù)棧:
Spring boot(2.1.6.RELEASE)+ JDK(1.8)+ Maven(apache-maven-3.5.4)+ Mybatis-plus(3.4.0)
最近在做一個(gè)項(xiàng)目系統(tǒng)時(shí),需要Java后端給前端頁面返回時(shí)間(要用本地時(shí)間--北京時(shí)間),后端時(shí)間字段映射,轉(zhuǎn)換,不管怎么處理都是按照北京時(shí)間來的,這個(gè)是正確的。但是只要一到前端顯示的時(shí)候,就會(huì)比北京時(shí)間少8個(gè)小時(shí)。
檢查各個(gè)可能出錯(cuò)的地方之后,感覺代碼寫的沒有問題。但前端顯示還是少8個(gè)小時(shí),那肯定還是有問題的,找吧。我的實(shí)體類如下:請(qǐng)注意被紅框圈住的 timezone = "GMT + 8"。后面會(huì)用到哦。

二、錯(cuò)誤原因
這也是我的一個(gè)習(xí)慣導(dǎo)致的,被紅框圈住的 timezone = "GMT + 8" 中間的加號(hào)兩邊各有一個(gè)有空格,然后序列化的時(shí)候沒有被識(shí)別這個(gè)時(shí)區(qū)。所以就導(dǎo)致傳給前端顯示的時(shí)候少了8個(gè)小時(shí),具體的可以看下圖所示。

三、解決方案
知道問題的原因之后,改這個(gè)問題就易如反掌了,把中間的空格刪除即可。如下圖所示。

再次測試,搞定。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java如何將list中的某個(gè)元素移動(dòng)位置
在Java編程中我們經(jīng)常會(huì)使用List數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ)一組元素,下面這篇文章主要給大家介紹了關(guān)于java如何將list中的某個(gè)元素移動(dòng)位置的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-05-05
springboot定時(shí)任務(wù)SchedulingConfigurer異步多線程實(shí)現(xiàn)方式
這篇文章主要介紹了springboot定時(shí)任務(wù)SchedulingConfigurer異步多線程實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04
IDEA生成標(biāo)準(zhǔn)JavaBean的幾種方法總結(jié)
標(biāo)準(zhǔn)javaBean是定義一個(gè)類的標(biāo)準(zhǔn)結(jié)構(gòu),下面這篇文章主要給大家總結(jié)介紹了關(guān)于IDEA生成標(biāo)準(zhǔn)JavaBean的幾種方法,文中通過圖文以及代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03
java設(shè)計(jì)模式之外觀模式(Facade)
這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)模式之外觀模式Facade的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
一文詳細(xì)講解Java時(shí)間格式轉(zhuǎn)換
這篇文章主要介紹了Java時(shí)間格式轉(zhuǎn)換的相關(guān)資料,文中詳細(xì)介紹了SimpleDateFormat(適用于Java8之前)和java.time(適用于Java8及之后)的用法,需要的朋友可以參考下2024-12-12
Java客戶端通過HTTPS連接到Easysearch實(shí)現(xiàn)過程
這篇文章主要為大家介紹了Java客戶端通過HTTPS連接到Easysearch實(shí)現(xiàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11

