2015-03-13 9 views
21

Sto lavorando su avvio a molla per creare un'applicazione di riposo. E ho un DTO come illustrato di seguito:Formato data nell'uscita json tramite avvio a molla

public class Subject { 

private String uid; 
private String number; 
private String initials; 
private Date dateOfBirth; 

E io uso Primavera-Hateos e il tipo piacerebbe ritornare di mio controller è ResponseEntity >>. Ho bisogno che la data venga visualizzata nel formato "aaaa-mm-gg". E sono colpito in questo. Gentilmente aiutami a raggiungere questo obiettivo. Grazie in anticipo.

risposta

22

Molto probabilmente si intende "yyyy-MM-dd" l'ultima piccola "m" implicherebbe la sezione dei minuti.

Si dovrebbe fare due cose

  • aggiungere spring.jackson.serialization.write-dates-as-timestamps:false nella vostra application.properties questo disabiliterà la conversione di date per i timestamp e invece utilizzano un formato compatibile con ISO-8601

  • È possibile che personalizzare il formato annotando il metodo getter di voi dateOfBirth proprietà con @JsonFormat(pattern="yyyy-MM-dd")

+0

Ciao, Sto avendo di fronte un problema qui. La data visualizzata nel formato JSON è inferiore di 1 giorno. – Pramod

+3

Testato con Spring Boot 1.3.0 non sembra richiedere il '' 'spring.jackson.serialization.write-dates-as-timestamps''', ma è sufficiente usare solo' '' @ JsonFormat''' annotazione – ngeek

+4

C'è un modo per farlo con tutte le date e non è necessario annotare uno per uno? – ephemeralCoder

36

Se si dispone di Jackson integerazione con la propria applicazione per serializzare il bean in formato JSON, è possibile utilizzare Jackson anotation @JsonFormat per formattare la data nel formato specificato.
Nel tuo caso se hai bisogno della tua data nel formato yyyy-mm-dd devi specificare @jsonFormat sopra il tuo campo su cui vuoi applicare questo formato.

Per esempio:

public class Subject { 

    private String uid; 
    private String number; 
    private String initials; 

    @JsonFormat(pattern="yyyy-MM-dd") 
    private Date dateOfBirth; 

    //Other Code 

} 

Da Documenti:

annotazione usato per configurare i dettagli su come valori delle proprietà devono essere serializzati.

More Reference Doc

maggio questo vi aiuterà.

+1

Ciao, sto avendo di fronte un problema qui. La data visualizzata nel formato JSON è inferiore di 1 giorno. – Pramod

+0

Si prega di postare quale valore si sta memorizzando e come? dal database o da qualcos'altro –

+0

Sto recuperando la data da un servizio di soap che è nel formato XMLGregorianCalendar. Ho convertito questo in java.util.Date e viene convertito in formato json. Ad esempio: dopo aver convertito l'oggetto XMLGregorianCalendar in Data, visualizza 2014-02-11 nella console. Ma nell'uscita di JSON sta visualizzando 2014-02-10. – Pramod

1

Se si desidera modificare il formato per tutte le date, è possibile aggiungere un personalizzatore del builder. Ecco un esempio di un fagiolo che converte le date per ISO 8601:

@Bean 
public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() { 
    return new Jackson2ObjectMapperBuilderCustomizer() { 
     @Override 
     public void customize(Jackson2ObjectMapperBuilder builder) { 
      builder.dateFormat(new ISO8601DateFormat());   
     }   
    }; 
} 
2

A partire dalla primavera Boot versione 1.2.0.RELEASE, c'è una proprietà è possibile aggiungere al vostro application.properties per impostare un formato di data di default a tutti dei tuoi corsi spring.jackson.date-format.

Per il vostro esempio il formato della data, si dovrebbe aggiungere questa riga alle proprietà del file:

spring.jackson.date-format=yyyy-mm-dd 

Riferimento https://docs.spring.io/spring-boot/docs/1.2.0.RELEASE/reference/html/common-application-properties.html