web-dev-qa-db-fra.com

Format de date dans la sortie JSON utilisant Spring Boot

Je travaille sur Spring Boot pour créer une application REST. Et j'ai un DTO comme indiqué ci-dessous:

public class Subject {

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

Et j'utilise Spring-Hateos et le type de reurn de mon contrôleur est ResponseEntity<Resources<Resource<Subject>>>. J'ai besoin que la date soit affichée au format "aaaa-mm-jj".

37
Pramod

Si vous avez une intégration de Jackson avec votre application pour sérialiser votre bean au format JSON, vous pouvez utiliser une anotation de Jackson @ JsonFormat pour formater votre date au format spécifié.
Dans votre cas, si vous avez besoin de votre date en yyyy-MM-dd format vous devez spécifier @JsonFormat au-dessus de votre champ sur lequel vous souhaitez appliquer ce format.

Par exemple :

public class Subject {

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

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

     //Other Code  

}  

De docs:

l'annotation utilisée pour configurer les détails de la manière dont les valeurs des propriétés doivent être sérialisées.

Plus de références

J'espère que cela t'aides.

65
Yagnesh Agola

Vous voulez probablement dire "aaaa-MM-jj" petit dernier 'm' impliquerait une section de minutes.

Tu devrais faire deux choses

  • ajoutez spring.jackson.serialization.write-dates-as-timestamps:false dans votre application.properties, cela désactivera la conversion des dates en horodatages et utilisera à la place un format conforme à ISO-8601

  • Vous pouvez personnaliser le format en annotant la méthode getter de votre propriété dateOfBirth avec @JsonFormat(pattern="yyyy-MM-dd")

32
Master Slave

À partir de Spring Boot version 1.2.0.RELEASE, vous pouvez ajouter une propriété à votre application.properties pour définir un format de date par défaut pour toutes vos classes spring.jackson.date-format.

Pour votre exemple de format de date, vous ajouteriez cette ligne à votre fichier de propriétés:

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

Référence https://docs.spring.io/spring-boot/docs/1.2.0.RELEASE/reference/html/common-application-properties.html

8
Daniel Higueras

Si vous souhaitez modifier le format pour toutes les dates, vous pouvez ajouter un personnaliseur de générateur. Voici un exemple de haricot convertissant les dates en ISO 8601:

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