Oblikovanje JSON datuma u proljetnom pokretanju

1. Pregled

U ovom uputstvu pokazat ćemo kako formatirati JSON polja s datumima u aplikaciji Spring Boot.

Istražit ćemo razne načine oblikovanja datuma pomoću Jackson, koji Spring Boot koristi kao zadani JSON procesor.

2.Koristeći @JsonFormat na a Datum Polje

2.1. Postavljanje formata

Možemo koristiti @JsonFormat napomena kako bi se formatiralo određeno polje:

javna klasa Kontakt {// ostala polja @JsonFormat (pattern = "yyyy-MM-dd") private LocalDate rođendan; @JsonFormat (pattern = "yyyy-MM-dd HH: mm: ss") private LocalDateTime lastUpdate; // standardni geteri i postavljači}

Na rođendan koristimo obrazac koji prikazuje samo datum dok je na zadnje ažuriranje polje uključujemo i vrijeme.

Koristili smo Vrste datuma Java 8 koji su prilično zgodni za bavljenje vremenitim tipovima. Naravno, ako trebamo koristiti naslijeđene vrste poput java.util.Date, napomenu možemo koristiti na isti način:

javna klasa ContactWithJavaUtilDate {// ostala polja @JsonFormat (pattern = "yyyy-MM-dd") private Datum rođenja; @JsonFormat (pattern = "yyyy-MM-dd HH: mm: ss") private Datum zadnjiUpdate; // standardni geteri i postavljači}

Na kraju, pogledajmo izlaz koji se generira pomoću @JsonFormat s danim formatom datuma:

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

Kao što vidimo, pomoću @JsonFormat napomena je izvrstan način formatiranja određenog polja datuma.

Međutim, trebali bismo ga koristiti samo kada nam treba određeno oblikovanje polja. Ako želimo imati opći format za sve datume u našoj aplikaciji, postoje bolji načini kako to postići, kao što ćemo vidjeti kasnije.

2.2. Postavljanje vremenske zone

Također, ako trebamo koristiti određenu vremensku zonu, možemo postaviti Vremenska zona atribut @JsonFormat:

@JsonFormat (pattern = "yyyy-MM-dd HH: mm: ss", timezone = "Europe / Zagreb") private LocalDateTime lastUpdate;

Ne trebamo ga koristiti ako tip već sadrži vremensku zonu, na primjer s java.time.ZonedDatetime.

3. Konfiguriranje zadanog formata

I dok @JsonFormat je moćan sam po sebi, tvrdo kodiranje formata i vremenske zone može nas zagristi.

Ako želimo konfigurirati zadani format za sve datume u našoj aplikaciji, fleksibilniji je način da ga konfigurirate u primjena.svojstva:

opruga.jackson.date-format = yyyy-MM-dd VV: mm: ss

A ako želimo koristiti određenu vremensku zonu u našim JSON datumima, za to postoji i svojstvo:

proljeće.jackson.time-zone = Europe / Zagreb

Iako je postavljanje zadanog formata poput ovog vrlo zgodno i jednostavno, postoji nedostatak ovog pristupa. Nažalost, to ne radi s vrstama datuma Java 8, Kao LocalDate i LocalDateTime - možemo ga koristiti samo za formatiranje polja tog tipa java.util.Datum ili java.util.Kalendar. Ipak ima nade, kao što ćemo uskoro vidjeti.

4. Prilagođavanje Jacksona ObjectMapper

Dakle, ako želimo koristiti tipove datuma Java 8 i postavite zadani format datuma, a zatim ga moramo pogledati stvaranje a Jackson2ObjectMapperBuilderCustomizer grah:

@Configuration javna klasa ContactAppConfig {private static final String dateFormat = "yyyy-MM-dd"; privatni statički konačni niz String dateTimeFormat = "yyyy-MM-dd HH: mm: ss"; @Bean public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer () {return builder -> {builder.simpleDateFormat (dateTimeFormat); builder.serializers (novi LocalDateSerializer (DateTimeFormatter.ofPattern (dateFormat))); builder.serializers (novi LocalDateTimeSerializer (DateTimeFormatter.ofPattern (dateTimeFormat))); }; }}

Gornji primjer pokazuje kako konfigurirati zadani format u našoj aplikaciji. Moramo definirati grah i nadjačati ga prilagoditi metoda za postavljanje željenog formata.

Iako bi ovaj pristup mogao izgledati pomalo glomazan, lijepa stvar u njemu je što radi i za Javu 8 i za naslijeđene tipove datuma.

5. Zaključak

U ovom smo članku istražili nekoliko različitih načina formatiranja JSON datuma u aplikaciji Spring Boot.

Kao i uvijek, izvorni kod za primjere možemo pronaći na GitHubu.