JSON-datums opmaken in Spring Boot

1. Overzicht

In deze zelfstudie laten we zien hoe u JSON-datumvelden opmaakt in een Spring Boot-toepassing.

We zullen verschillende manieren verkennen om datums op te maken met Jackson, die door Spring Boot wordt gebruikt als de standaard JSON-processor.

2.Gebruik makend van @JsonFormat op een Datum Veld

2.1. Het formaat instellen

We kunnen de @JsonFormat annotatie om een ​​specifiek veld op te maken:

openbare klasse Contact {// andere velden @JsonFormat (patroon = "jjjj-MM-dd") privé LocalDate verjaardag; @JsonFormat (patroon = "jjjj-MM-dd HH: mm: ss") privé LocalDateTime lastUpdate; // standaard getters en setters}

Op de verjaardag veld, gebruiken we een patroon dat alleen de datum weergeeft terwijl op het laatste update veld tellen we ook de tijd mee.

We gebruikten de Datumtypen in Java 8 die erg handig zijn voor het omgaan met tijdelijke typen. Natuurlijk, als we de legacy-typen moeten gebruiken, zoals java.util.Date, we kunnen de annotatie op dezelfde manier gebruiken:

openbare klasse ContactWithJavaUtilDate {// andere velden @JsonFormat (patroon = "jjjj-MM-dd") privé Datum verjaardag; @JsonFormat (patroon = "jjjj-MM-dd HH: mm: ss") privé Datum lastUpdate; // standaard getters en setters}

Laten we tot slot eens kijken naar de uitvoer die wordt weergegeven met behulp van de @JsonFormat met het gegeven datumnotatie:

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

Zoals we kunnen zien, gebruik je de @JsonFormat annotatie is een uitstekende manier om een ​​bepaald datumveld op te maken.

We moeten het echter alleen gebruiken als we specifieke opmaak voor velden nodig hebben. Als we een algemeen formaat voor alle datums in onze applicatie willen hebben, zijn er betere manieren om dit te bereiken, zoals we later zullen zien.

2.2. De tijdzone instellen

Als we een bepaalde tijdzone moeten gebruiken, kunnen we ook de tijdzone attribuut van de @JsonFormat:

@JsonFormat (patroon = "jjjj-MM-dd UU: mm: ss", tijdzone = "Europa / Zagreb") privé LocalDateTime lastUpdate;

We hoeven het niet te gebruiken als een type de tijdzone al bevat, bijvoorbeeld met java.time.ZonedDatetime.

3. Het standaardformaat configureren

En terwijl @JsonFormat is krachtig op zichzelf, het hardcoderen van het formaat en de tijdzone kan ons op de weg bijten.

Als we een standaardformaat willen configureren voor alle datums in onze applicatie, een meer flexibele manier is om het te configureren in application.properties:

spring.jackson.date-format = jjjj-MM-dd UU: mm: ss

En als we een specifieke tijdzone willen gebruiken in onze JSON-datums, is daar ook een eigenschap voor:

spring.jackson.time-zone = Europe / Zagreb

Hoewel het op deze manier instellen van het standaardformaat best handig en ongecompliceerd is, er is een nadeel aan deze benadering. Helaas werkt het niet met de Java 8-datumtypen, Leuk vinden LocalDate en LocalDateTime - we kunnen het alleen gebruiken om velden van het type op te maken java.util.Date of de java.util.Calendar. Er is echter hoop, zoals we binnenkort zullen zien.

4. Jackson's aanpassen ObjectMapper

Dus als we Java 8-datumtypen willen gebruiken en stel een standaard datumnotatie in, dan moeten we kijken het creëren van een Jackson2ObjectMapperBuilderCustomizer Boon:

@Configuration openbare klasse ContactAppConfig {privé statische laatste String dateFormat = "jjjj-MM-dd"; private static final String dateTimeFormat = "jjjj-MM-dd HH: mm: ss"; @Bean openbare Jackson2ObjectMapperBuilderCustomizer jsonCustomizer () {return builder -> {builder.simpleDateFormat (dateTimeFormat); builder.serializers (nieuwe LocalDateSerializer (DateTimeFormatter.ofPattern (dateFormat))); builder.serializers (nieuwe LocalDateTimeSerializer (DateTimeFormatter.ofPattern (dateTimeFormat))); }; }}

Het bovenstaande voorbeeld laat zien hoe u een standaardformaat configureert in onze applicatie. We moeten een boon definiëren en deze negeren aanpassen methode om het gewenste formaat in te stellen.

Hoewel deze benadering er misschien wat omslachtig uitziet, is het leuke eraan dat het werkt voor zowel de Java 8 als de oudere datatypes.

5. Conclusie

In dit artikel hebben we een aantal verschillende manieren onderzocht om JSON-datums in een Spring Boot-toepassing op te maken.

Zoals altijd kunnen we de broncode voor de voorbeelden vinden op GitHub.


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