Guide de @JsonFormat à Jackson

1. Vue d’ensemble

Dans cet article, nous essayons de comprendre comment utiliser @ JsonFormat dans Jackson. C’est une annotation de Jackson qui est utilisée pour spécifier comment formater les champs et/ou les propriétés pour la sortie JSON. Plus précisément, cette annotation vous permet de spécifier comment formater

Spécifiquement, cette annotation vous permet de spécifier comment formater les valeurs Date et Calendar selon un format SimpleDateFormat .

2. Dépendance Maven

@ JsonFormat est défini dans https://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22com.fasterxml.jackson.core%22%20a%3a%3A%22jackson-databind__1 22[jackson-databind]donc nous avons besoin de la dépendance Maven suivante:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.4</version>
</dependency>

3. Commencer

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é depuis 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 construction et l’exécution de cet exemple de code renvoie la sortie suivante:

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

Comme vous pouvez le constater, le champ createdDate est indiqué en nombre de secondes depuis epoch, le format par défaut utilisé pour les champs Date .

3.2. Utilisation de l’annotation sur un accesseur

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

Le format de données utilisé pour l’argument pattern est spécifié par SimpleDateFormat :

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

Avec ce changement de place, nous reconstruisons 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 constater, le champ createdDate a été formaté à l’aide du format spécifié SimpleDateFormat à 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 calculée 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écifier les 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 shape définie sur JsonFormat.Shape.NUMBER génère la sortie par défaut pour les types Date - sous la forme du nombre de secondes écoulées depuis l’époque _. Le paramètre pattern_ n’est pas applicable à ce cas et est ignoré:

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

La sortie est comme ci-dessous:

{ ..., "dateNum":1482054723876 }

4. Conclusion

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

L’exemple de code présenté ci-dessus est disponible à l’adresse over sur GitHub .