Guida a @JsonFormat a Jackson

1. Panoramica

In questo articolo, proviamo a capire come utilizzare @JsonFormat a Jackson. È un'annotazione Jackson che viene utilizzata per specificare come formattare i campi e / o le proprietà per l'output JSON.

In particolare, questa annotazione consente di specificare come formattare i valori di data e calendario in base a un formato SimpleDateFormat .

2. Dipendenza da Maven

@JsonFormat è definito nel pacchetto jackson-databind quindi abbiamo bisogno della seguente dipendenza da Maven:

 com.fasterxml.jackson.core jackson-databind 2.11.1 

3. Introduzione

3.1. Utilizzo del formato predefinito

Per iniziare, dimostreremo i concetti dell'utilizzo dell'annotazione @JsonFormat con una classe che rappresenta un utente.

Poiché stiamo cercando di spiegare i dettagli dell'annotazione, l' oggetto User verrà creato su richiesta (e non memorizzato o caricato da un database) e serializzato in JSON:

public class User { private String firstName; private String lastName; private Date createdDate = new Date(); // standard constructor, setters and getters } 

La creazione e l'esecuzione di questo esempio di codice restituisce il seguente output:

{"firstName":"John","lastName":"Smith","createdDate":1482047026009}

Come puoi vedere, il campo CreatedDate viene mostrato come il numero di secondi trascorsi dall'epoca, che è il formato predefinito utilizzato per i campi Data .

3.2. Utilizzo dell'annotazione su un getter

Usiamo ora @JsonFormat per specificare il formato in cui il campo createdDate deve essere serializzato. Ecco la classe User aggiornata per questa modifica. Il campo createdDate è stato annotato come mostrato per specificare il formato della data.

Il formato dati utilizzato per l' argomento pattern è specificato da SimpleDateFormat :

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "[email protected]:mm:ss.SSSZ") private Date createdDate;

Con questa modifica in atto, ricostruiamo il progetto e lo eseguiamo. L'output è mostrato di seguito:

{"firstName":"John","lastName":"Smith","createdDate":"[email protected]:53:34.740+0000"}

Come puoi vedere, il campo createdDate è stato formattato utilizzando il formato SimpleDateFormat specificato utilizzando l' annotazione @JsonFormat .

L'esempio sopra mostra l'utilizzo dell'annotazione su un campo. Può anche essere utilizzato in un metodo getter (una proprietà) come segue.

Ad esempio, potresti avere una proprietà che viene calcolata durante l'invocazione. In tal caso, puoi utilizzare l'annotazione sul metodo getter. Nota che anche lo schema è stato modificato per restituire solo la parte della data dell'istante:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") public Date getCurrentDate() { return new Date(); }

L'output risultante è il seguente:

{ ... , "currentDate":"2016-12-18", ...}

3.3. Specificare le impostazioni internazionali

Oltre a specificare il formato della data, è anche possibile specificare le impostazioni internazionali da utilizzare per la serializzazione. Se non si specifica questo parametro, la serializzazione viene eseguita con le impostazioni internazionali predefinite:

@JsonFormat( shape = JsonFormat.Shape.STRING, pattern = "[email protected]:mm:ss.SSSZ", locale = "en_GB") public Date getCurrentDate() { return new Date(); }

3.4. Specificare la forma

L'utilizzo di @JsonFormat con la forma impostata su JsonFormat.Shape.NUMBER produce l'output predefinito per i tipi di data , come il numero di secondi dall'epoca . Il modello di parametro non è applicabile a questo caso e viene ignorato:

@JsonFormat(shape = JsonFormat.Shape.NUMBER) public Date getDateNum() { return new Date(); }

L'output è come mostrato di seguito:

{ ..., "dateNum":1482054723876 }

4. Conclusione

In conclusione, @JsonFormat viene utilizzato per controllare il formato di output dei tipi di data e calendario come dimostrato sopra.

Il codice di esempio mostrato sopra è disponibile su GitHub.