Guide de @JsonFormat à Jackson

1. Vue d'ensemble

Dans cet article, nous essayons de comprendre comment utiliser @JsonFormat dans Jackson. Il s'agit d'une annotation Jackson utilisée pour spécifier comment mettre en forme les champs et / ou les propriétés pour la sortie JSON.

Plus précisément, cette annotation vous permet de spécifier comment mettre en forme les valeurs de date et de calendrier selon un format SimpleDateFormat .

2. Dépendance de Maven

@JsonFormat est défini dans le package jackson-databind, nous avons donc besoin de la dépendance Maven suivante:

 com.fasterxml.jackson.core jackson-databind 2.11.1 

3. Premiers pas

3.1. Utilisation du format par défaut

Pour commencer, nous allons démontrer les concepts d'utilisation de l' annotation @JsonFormat avec une classe représentant un utilisateur.

Puisque nous essayons d'expliquer les détails de l'annotation, l' objet User sera créé sur demande (et non stocké ou chargé à partir d'une base de données) et sérialisé en JSON:

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

La création et l'exécution de cet exemple de code renvoie la sortie suivante:

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

Comme vous pouvez le voir, le champ createdDate est affiché comme le nombre de secondes depuis l'époque qui est le format par défaut utilisé pour les champs Date .

3.2. Utilisation de l'annotation sur un getter

Utilisons maintenant @JsonFormat pour spécifier le format dans lequel le champ createdDate doit être sérialisé. Voici la classe User mise à jour pour ce changement. Le champ createdDate a été annoté comme indiqué pour spécifier le format de date.

Le format de données utilisé pour l' argument de modèle est spécifié par SimpleDateFormat :

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

Avec ce changement en place, nous construisons à nouveau le projet et l'exécutons. La sortie est indiquée ci-dessous:

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

Comme vous pouvez le voir, le champ createdDate a été formaté à l'aide du format SimpleDateFormat spécifié à l'aide de l' annotation @JsonFormat .

L'exemple ci-dessus illustre l'utilisation de l'annotation sur un champ. Il peut également être utilisé dans une méthode getter (une propriété) comme suit.

Par exemple, vous pouvez avoir une propriété qui est en cours de calcul lors de l'appel. Vous pouvez utiliser l'annotation sur la méthode getter dans un tel cas. Notez que le modèle a également été modifié pour ne renvoyer que la partie date de l'instant:

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

La sortie résultante est la suivante:

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

3.3. Spécification des paramètres régionaux

En plus de spécifier le format de date, vous pouvez également spécifier les paramètres régionaux à utiliser pour la sérialisation. Si vous ne spécifiez pas ce paramètre, la sérialisation est effectuée avec les paramètres régionaux par défaut:

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

3.4. Spécifier la forme

L'utilisation de @JsonFormat avec la forme définie sur JsonFormat.Shape.NUMBER entraîne la sortie par défaut pour les types de date - comme le nombre de secondes depuis l'époque . Le modèle de paramètre n'est pas applicable à ce cas et est ignoré:

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

La sortie est comme indiqué ci-dessous:

{ ..., "dateNum":1482054723876 }

4. Conclusion

En conclusion, @JsonFormat est utilisé pour contrôler le format de sortie des types Date et Calendrier, comme illustré ci-dessus.

L'exemple de code ci-dessus est disponible à l'adresse over sur GitHub.