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}
På 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.