Formatering av JSON-datoer i Spring Boot

1. Oversikt

I denne veiledningen viser vi hvordan du formaterer JSON-datofelt i et Spring Boot-program.

Vi vil utforske ulike måter å formatere datoer på Jackson, som brukes av Spring Boot som standard JSON-prosessor.

2.Ved hjelp av @JsonFormat på en Dato Felt

2.1. Stille inn formatet

Vi kan bruke @JsonFormat kommentar for å formatere et bestemt felt:

offentlig klasse Kontakt {// andre felt @JsonFormat (mønster = "åååå-MM-dd") privat LocalDate bursdag; @JsonFormat (mønster = "åååå-MM-dd HH: mm: ss") privat LocalDateTime lastUpdate; // standard getters og setters}

fødselsdag felt, bruker vi et mønster som bare gjengir datoen mens du er på siste oppdatering felt inkluderer vi også tiden.

Vi brukte Java 8 dato typer som er ganske praktiske for å håndtere timelige typer. Selvfølgelig, hvis vi trenger å bruke eldre typer som java.util.Date, vi kan bruke merknaden på samme måte:

offentlig klasse ContactWithJavaUtilDate {// andre felt @JsonFormat (mønster = "åååå-MM-dd") privat Dato bursdag; @JsonFormat (mønster = "åååå-MM-dd HH: mm: ss") privat Dato lastUpdate; // standard getters og setters}

Til slutt, la oss ta en titt på utdataene som er gjengitt ved å bruke @JsonFormat med gitt datoformat:

{"birthday": "2019-02-03", "lastUpdate": "2019-02-03 10:08:02"}

Som vi kan se, bruker du @JsonFormat kommentar er en utmerket måte å formatere et bestemt datofelt på.

Vi bør imidlertid bare bruke den når vi trenger spesifikk formatering for felt. Hvis vi vil ha et generelt format for alle datoer i applikasjonen vår, er det bedre måte å oppnå dette på, som vi vil se senere.

2.2. Stille inn tidssone

Også, hvis vi trenger å bruke en bestemt tidssone, kan vi stille inn tidssone attributt til @JsonFormat:

@JsonFormat (mønster = "åååå-MM-dd HH: mm: ss", tidssone = "Europa / Zagreb") privat LocalDateTime lastUpdate;

Vi trenger ikke bruke den hvis en type allerede inneholder tidssonen, for eksempel med java.time.ZonedDatetime.

3. Konfigurere standardformat

Og mens @JsonFormat er kraftig alene, og hardkoding av formatet og tidssonen kan bite oss i veien.

Hvis vi vil konfigurere et standardformat for alle datoer i applikasjonen vår, en mer fleksibel måte er å konfigurere den i application.properties:

spring.jackson.date-format = åååå-MM-dd HH: mm: ss

Og hvis vi vil bruke en bestemt tidssone i JSON-datoene, er det også en egenskap for det:

spring.jackson.time-zone = Europa / Zagreb

Selv om det er ganske praktisk og greit å sette standardformat som dette, det er en ulempe med denne tilnærmingen. Dessverre fungerer det ikke med datatypene Java 8, som LocalDate og LocalDateTime - vi kan bare bruke den til å formatere felt av typen java.util.Date eller java.util.Kalender. Det er imidlertid håp, som vi snart vil se.

4. Tilpasse Jacksons ObjectMapper

Så hvis vi vil bruke Java 8-datotyper og angi et standard datoformat, så må vi se på skape en Jackson2ObjectMapperBuilderCustomizer bønne:

@Configuration public class ContactAppConfig {private static final String dateFormat = "åååå-MM-dd"; privat statisk slutt String dateTimeFormat = "åååå-MM-dd HH: mm: ss"; @Bean offentlig Jackson2ObjectMapperBuilderCustomizer jsonCustomizer () {returbygger -> {builder.simpleDateFormat (dateTimeFormat); builder.serializers (ny LocalDateSerializer (DateTimeFormatter.ofPattern (dateFormat))); builder.serializers (ny LocalDateTimeSerializer (DateTimeFormatter.ofPattern (dateTimeFormat))); }; }}

Ovenstående eksempel viser hvordan du konfigurerer et standardformat i applikasjonen vår. Vi må definere en bønne og overstyre dens tilpasse metode for å stille inn ønsket format.

Selv om denne tilnærmingen kan se litt tungvint ut, er det fine med det at den fungerer for både Java 8 og de eldre datatypene.

5. Konklusjon

I denne artikkelen undersøkte vi en rekke forskjellige måter å formatere JSON-datoer i en Spring Boot-applikasjon.

Som alltid kan vi finne kildekoden for eksemplene på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found