Formátovanie dátumov JSON v Spring Boot

1. Prehľad

V tomto tutoriáli si ukážeme, ako formátovať polia dátumu JSON v aplikácii Spring Boot.

Preskúmame rôzne spôsoby formátovania dátumov pomocou Jackson, ktorý Spring Boot používa ako svoj predvolený procesor JSON.

2.Použitím @JsonFormat na a Dátum Lúka

2.1. Nastavenie formátu

Môžeme použiť @JsonFormat poznámky na formátovanie konkrétneho poľa:

verejná trieda Kontaktovať {// ďalšie polia @JsonFormat (pattern = "rrrr-MM-dd") súkromné ​​LocalDate narodeniny; @JsonFormat (vzor = "rrrr-MM-dd HH: mm: ss") private LocalDateTime lastUpdate; // štandardné getre a setre}

Na narodeniny pole, použijeme vzor, ​​ktorý vykreslí iba dátum, zatiaľ čo na Posledná aktualizácia pole zahrnieme aj čas.

Použili sme Typy dátumov Java 8 ktoré sú celkom užitočné na riešenie dočasných typov. Samozrejme, ak potrebujeme použiť staršie typy ako java.util.Date, môžeme anotáciu použiť rovnakým spôsobom:

verejná trieda ContactWithJavaUtilDate {// ďalšie polia @JsonFormat (vzor = "rrrr-MM-dd") súkromné ​​Dátum narodenia; @JsonFormat (pattern = "rrrr-MM-dd HH: mm: ss") súkromné ​​Dátum lastUpdate; // štandardné getre a setre}

Na záver sa pozrime na výstup vykreslený pomocou príkazu @JsonFormat s daným formátom dátumu:

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

Ako vidíme, pomocou @JsonFormat anotácia je vynikajúci spôsob formátovania konkrétneho poľa s dátumom.

Mali by sme ho však používať, iba keď potrebujeme konkrétne formátovanie polí. Ak chceme mať v našej aplikácii všeobecný formát pre všetky dáta, existujú lepšie spôsoby, ako to dosiahnuť, ako uvidíme neskôr.

2.2. Nastavenie časového pásma

Tiež, ak potrebujeme použiť konkrétne časové pásmo, môžeme nastaviť časové pásmo atribút @JsonFormat:

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

Nemusíme ho používať, ak typ už časové pásmo obsahuje, napríklad s java.time.ZonedDatetime.

3. Konfigurácia predvoleného formátu

A zatiaľ @JsonFormat je sám o sebe výkonný, napevno kóduje formát a časové pásmo nás môže zahryznúť.

Ak chceme nakonfigurovať predvolený formát pre všetky dátumy v našej aplikácii, flexibilnejším spôsobom je nakonfigurovať ho v application.properties:

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

A ak chceme v našich dátumoch JSON použiť konkrétne časové pásmo, je tu aj vlastnosť:

spring.jackson.time-zone = Európa / Záhreb

Aj keď je nastavenie predvoleného formátu tohto formátu celkom užitočné a priame, tento prístup má nevýhodu. Bohužiaľ to nefunguje s typmi dátumov Java 8, Páči sa mi to LocalDate a LocalDateTime - môžeme ho použiť iba na formátovanie polí typu java.util.Date alebo java.util.Calendar. Existuje však nádej, ako sa čoskoro uvidíme.

4. Prispôsobenie Jacksona ObjectMapper

Pokiaľ teda chceme používať typy dátumov Java 8 a nastaviť predvolený formát dátumu, potom sa musíme pozrieť na vytvorenie a Jackson2ObjectMapperBuilderCustomizer fazuľa:

@ Konfigurácia verejná trieda ContactAppConfig {private static final String dateFormat = "rrrr-MM-dd"; private static final String dateTimeFormat = "rrrr-MM-dd HH: mm: ss"; @Bean public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer () {return builder -> {builder.simpleDateFormat (dateTimeFormat); builder.serializers (nový LocalDateSerializer (DateTimeFormatter.ofPattern (dateFormat))); builder.serializers (nový LocalDateTimeSerializer (DateTimeFormatter.ofPattern (dateTimeFormat))); }; }}

Vyššie uvedený príklad ukazuje, ako nakonfigurovať predvolený formát v našej aplikácii. Musíme definovať fazuľu a prepísať ju prispôsobiť spôsob nastavenia požadovaného formátu.

Aj keď by tento prístup mohol vyzerať trochu ťažkopádne, pekné na ňom je, že funguje pre Java 8 aj pre staršie typy dátumov.

5. Záver

V tomto článku sme preskúmali množstvo rôznych spôsobov formátovania dátumov JSON v aplikácii Spring Boot.

Ako vždy, na GitHube nájdeme zdrojový kód príkladov.


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