Gids voor @JsonFormat in Jackson

1. Overzicht

In dit artikel proberen we te begrijpen hoe u @JsonFormat in Jackson. Het is een Jackson-annotatie die wordt gebruikt om aan te geven hoe velden en / of eigenschappen voor JSON-uitvoer moeten worden opgemaakt.

In het bijzonder stelt deze annotatie u in staat om aan te geven hoe u moet formatteren Datum en Kalender waarden volgens a SimpleDateFormat formaat.

2. Maven Afhankelijkheid

@JsonFormat is gedefinieerd in het jackson-databind-pakket, dus we hebben de volgende Maven-afhankelijkheid nodig:

 com.fasterxml.jackson.core jackson-databind 2.11.1 

3. Aan de slag

3.1. Het standaardformaat gebruiken

Om te beginnen zullen we de concepten van het gebruik van de @JsonFormat annotatie met een klasse die een gebruiker vertegenwoordigt.

Omdat we proberen de details van de annotatie uit te leggen, is de Gebruiker object wordt op verzoek gemaakt (en niet opgeslagen of geladen vanuit een database) en geserialiseerd naar JSON:

openbare klasse Gebruiker {private String firstName; private String achternaam; private Date createdDate = nieuwe datum (); // standaard constructor, setters en getters} 

Het bouwen en uitvoeren van dit codevoorbeeld levert de volgende uitvoer op:

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

Zoals u kunt zien, is de createdDate veld wordt weergegeven als het aantal seconden sinds epoch, wat het standaardformaat is dat wordt gebruikt voor Datum velden.

3.2. De aantekening op een getter gebruiken

Laten we nu gebruiken @JsonFormat om het formaat op te geven dat het createdDate veld moet worden geserialiseerd. Hier is de gebruikersklasse bijgewerkt voor deze wijziging. De createdDate veld is geannoteerd zoals getoond om de datumnotatie te specificeren.

Het gegevensformaat dat wordt gebruikt voor het patroon argument wordt gespecificeerd door SimpleDateFormat:

@JsonFormat (shape = JsonFormat.Shape.STRING, pattern = "[e-mail beveiligd]: mm: ss.SSSZ") privé Aanmaakdatum;

Nu deze wijziging is doorgevoerd, bouwen we het project opnieuw op en voeren het uit. De output wordt hieronder getoond:

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

Zoals u kunt zien, is de createdDate veld is opgemaakt met het opgegeven SimpleDateFormat formaat met behulp van de @JsonFormat annotatie.

Het bovenstaande voorbeeld toont het gebruik van de annotatie op een veld. Het kan ook als volgt in een getter-methode (een eigenschap) worden gebruikt.

U kunt bijvoorbeeld een eigenschap hebben die bij aanroep wordt berekend. U kunt in zo'n geval de annotatie op de getter-methode gebruiken. Merk op dat het patroon ook is gewijzigd om alleen het datumgedeelte van het moment te retourneren:

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

De resulterende output is als volgt:

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

3.3. Specificeren van de landinstelling

Naast het specificeren van de datumnotatie, kunt u ook de landinstelling specificeren die moet worden gebruikt voor serialisering. Als u deze parameter niet opgeeft, wordt de serialisering uitgevoerd met de standaardlandinstelling:

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

3.4. De vorm specificeren

Gebruik makend van @JsonFormat met vorm ingesteld op JsonFormat.Shape.NUMBER resulteert in de standaarduitvoer voor Datum types - als het aantal seconden sinds het tijdperk. De parameter patroon is niet van toepassing op dit geval en wordt genegeerd:

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

De output is zoals hieronder getoond:

{..., "dateNum": 1482054723876}

4. Conclusie

Tot slot, @JsonFormat wordt gebruikt om het uitvoerformaat van Datum en Kalender typen zoals hierboven aangetoond.

De voorbeeldcode die hierboven wordt weergegeven, is beschikbaar op GitHub.