J'ai un petit problème avec le formatage d'un Java 8 LocalDateTime dans mon application Spring Boot. Avec les dates `` normales '', je n'ai aucun problème, mais les champs LocalDateTime sont convertis comme suit:
"startDate" : {
"year" : 2010,
"month" : "JANUARY",
"dayOfMonth" : 1,
"dayOfWeek" : "FRIDAY",
"dayOfYear" : 1,
"monthValue" : 1,
"hour" : 2,
"minute" : 2,
"second" : 0,
"nano" : 0,
"chronology" : {
"id" : "ISO",
"calendarType" : "iso8601"
}
}
Alors que je voudrais le convertir en quelque chose comme:
"startDate": "2015-01-01"
Mon code ressemble à ceci:
@JsonFormat(pattern="yyyy-MM-dd")
@DateTimeFormat(iso = DateTimeFormat.ISO.TIME)
public LocalDateTime getStartDate() {
return startDate;
}
Mais l'une ou l'autre des annotations ci-dessus ne fonctionne pas, la date continue à être formatée comme ci-dessus. Suggestions bienvenues!
@JsonSerialize(using = LocalDateTimeSerializer.class)
...application.properties
entrée, comme suggéré par @patelb answer.@JsonSerialize
annotation mentionnée par Nick pour le faire fonctionner.J'ai ajouté la
com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.6.1
dépendance et j'ai commencé à obtenir la date au format suivant:ce n'est pas ce que je voulais mais je me rapprochais. J'ai ensuite ajouté ce qui suit
au fichier application.properties qui m'a donné le format correct dont j'avais besoin.
la source
jackson-datatype-jsr310
dépendance. Cela devrait être la réponse acceptée.mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
Le voici dans maven, avec la propriété pour que vous puissiez survivre entre les mises à niveau de démarrage de printemps
la source
@JsonSerialize(using = LocalDateTimeSerializer.class)
1) Dépendance
2) Annotation au format date-heure.
3) Spring Config.
la source
J'ai trouvé une autre solution que vous pouvez convertir dans le format de votre choix et appliquer à tous les types de données LocalDateTime et vous n'avez pas à spécifier @JsonFormat au-dessus de chaque type de données LocalDateTime. ajoutez d'abord la dépendance:
Ajoutez le haricot suivant:
dans votre fichier de configuration, ajoutez ce qui suit:
Cela sérialisera et dé-sérialisera toutes les propriétés LocalDateTime et ZonedDateTime tant que vous utilisez objectMapper créé par spring.
Le format que vous avez obtenu pour ZonedDateTime est: "2017-12-27T08: 55: 17.317 + 02: 00 [Asia / Jerusalem]" pour LocalDateTime est: "2017-12-27T09: 05: 30.523"
la source
SimpleModule
s'étendModule
.Module
est un résumé.val bean = new SimpleModule();
fonctionne parfaitement.Ecrire cette réponse comme un rappel pour moi aussi.
J'ai combiné plusieurs réponses ici et à la fin la mienne a fonctionné avec quelque chose comme ça. (J'utilise SpringBoot 1.5.7 et Lombok 1.16.16)
la source
DateTimeFormat
et d'autres.Cela fonctionne bien:
Ajoutez la dépendance:
Ajoutez l'annotation:
Maintenant, vous devez obtenir le format correct.
Pour utiliser le mappeur d'objets, vous devez enregistrer le JavaTime
la source
Comme déjà mentionné, spring-boot récupérera tout ce dont vous avez besoin (pour le démarrage web et webflux).
Mais ce qui est encore mieux: vous n'avez pas besoin d'enregistrer vous-même des modules. Jetez un œil ici . Depuis
@SpringBootApplication
utilise@EnableAutoConfiguration
sous le capot, cela signifieJacksonAutoConfiguration
sera ajouté au contexte automatiquement. Maintenant, si vous regardez à l'intérieurJacksonAutoConfiguration
, vous verrez:Ce type sera appelé dans le processus d'initialisation et récupérera tous les modules qu'il peut trouver dans le classpath. (J'utilise Spring Boot 2.1)
la source
J'utilise Springboot 2.0.6 et pour une raison quelconque, les modifications yml de l'application n'ont pas fonctionné. Et aussi j'avais plus d'exigences.
J'ai essayé de créer ObjectMapper et de le marquer comme primaire, mais Spring Boot s'est plaint que j'avais déjà jacksonObjectMapper comme marqué Primary !!
Voilà donc ce que j'ai fait. J'ai apporté des modifications au mappeur interne.
Mon sérialiseur et mon désérialiseur sont spéciaux - ils traitent de «jj / MM / AAAA»; et lors de la désérialisation - il fait de son mieux pour utiliser le format populaire 3-4 pour s'assurer que j'ai du LocalDate.
la source
@JsonDeserialize(using= LocalDateDeserializer.class)
ne fonctionne pas pour moi avec la dépendance ci-dessous.J'ai utilisé le convertisseur de code ci-dessous pour désérialiser la date en un fichier
java.sql.Date
.la source
utilisez simplement:
ou vous pouvez utiliser le modèle comme vous le souhaitez, par exemple:
('-' in place of '/')
la source
J'utilise Spring Boot 2.1.8. J'ai importé
qui inclut le jackson-datatype-jsr310 .
Ensuite, j'ai dû ajouter ces annotations
et il fonctionne. Le JSON ressemble à ceci:
la source
spring-boot-starter-json
n'est nécessaire que s'ilspring-boot-starter-web
manque.