2015-08-05 13 views
13

Sono stato utilizzato Spring Date Rest con Spring Boot nel mio progetto. Questo progetto ha un oggetto e ho usato l'annotazione @JsonFormat per formattare il campo della data che verrà ricevuto dal mio Json. Il formato del campo Data è "gg/MM/aaaa". Quando invio a mio json il valore "08/07/1980" il Jackson si converte nel valore "07/07/1980".Jackson @JsonFormat imposta la data con un giorno in meno

Il problema è che @JsonFormat impostare la data con una giornata meno

Questo è il mio codice sorgente

@Temporal(TemporalType.DATE) 
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy", locale = "pt-BR", timezone = "UTC") 
private Date birthDate; 

Grazie

+0

Immagino che intendi quando esegui una richiesta per il tuo back-end. Il client è un browser o una specie di strumento REST? Sia client che server nello stesso fuso orario? – franDayz

+1

La mia prima ipotesi è che, poiché si utilizza UTC e si omettono ore e secondi, viene applicato lo scostamento tra Brasile e UTC causando la perdita di informazioni sul tempo. Come prova rapida puoi omettere la proprietà locale dall'annotazione e utilizzare questo modello invece "yyyy-MM-dd'T'HH: mm: ss.SSSZ" che include le informazioni sul fuso orario e i millisecondi quindi non importa la rappresentazione del client sceglie – franDayz

risposta

18

Ho risolto il mio problema utilizzando:

@Temporal(TemporalType.DATE) 
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy", locale = "pt-BR", timezone = "Brazil/East") 
private Date birthDate; 

Ho cambiato fuso orario a "Brasile/Est" o "America/Sao_Paulo" e ora di lavoro

Grazie

+1

Ho avuto lo stesso problema, grazie! – victorleduc

+0

Buono scatto ...... – deFreitas

+0

stesso problema, stessa soluzione :)) – Samrat

2

@ opere risposta di William, ma si dovrebbe aggiungere le linee di tesi per il tuo application.properties file invece:

spring.jackson.time-zone=Brazil/East 
spring.jackson.locale=pt-BR 

In in questo modo, si indica il fuso orario e le impostazioni internazionali solo una volta e si applica a tutta la Data dell'applicazione.

+0

Questo ha funzionato per me –

Problemi correlati