YAML til liste over objekter i vårstøvlen

1. Oversikt

I denne korte opplæringen skal vi se nærmere på hvordan man kartlegger en YAML-liste i en Liste i Spring Boot.

Vi begynner først med litt bakgrunn i hvordan du definerer lister i YAML. Deretter graver vi dypere for å se hvordan vi kan binde YAML-lister til Listes av objekter.

2. Rask oppsummering om lister i YAML

Kort fortalt er YAML en lesbar standard for dataserialisering som gir en kort og tydelig måte å skrive konfigurasjonsfiler på. Det gode med YAML er det faktum at det støtter flere datatyper som Listes, Karts og skalartyper.

Elementene i en YAML-liste er definert ved hjelp av "-" -tegnet, og de har alle samme innrykknivå:

yamlconfig: liste: - item1 - item2 - item3 - item4

Til sammenligning bruker den eiendomsbaserte ekvivalenten indekser:

yamlconfig.list [0] = item1 yamlconfig.list [1] = item2 yamlconfig.list [2] = item3 yamlconfig.list [3] = item4

For flere eksempler, ta gjerne en titt på artikkelen vår om hvordan du definerer lister og kart ved hjelp av YAML- og egenskapsfiler.

Faktisk, den hierarkiske naturen til YAML forbedrer lesbarheten betydelig sammenlignet med egenskapsfiler. Et annet interessant trekk ved YAML er muligheten til å definere forskjellige egenskaper for forskjellige vårprofiler.

Det er verdt å nevne at Spring Boot gir støtte utenom boksen for YAML-konfigurasjon. Etter design laster Spring Boot konfigurasjonsegenskaper fra application.yml ved oppstart uten ekstra arbeid.

3. Binde en YAML-liste til en enkel Liste av objekter

Spring Boot gir @ConfigurationProperties kommentar til forenkle logikken med å kartlegge eksterne konfigurasjonsdata til en objektmodell.

I denne delen bruker vi @ConfigurationProperties å binde en YAML-liste til en Liste.

Vi starter med å definere en enkel liste i application.yml:

applikasjon: profiler: - dev - test - prod - 1 - 2

Deretter lager vi en enkel ApplicationProps POJO for å holde logikken med å binde YAML-listen vår til en Liste avgjenstander:

@Component @ConfigurationProperties (prefix = "applikasjon") offentlig klasse ApplicationProps {private List-profiler; // getter og setter}

De ApplicationProps klassen må dekoreres med @ConfigurationProperties for å uttrykke intensjonen om å kartlegge alle YAML-egenskapene med det spesifiserte prefikset til et objekt fra ApplicationProps.

Å binde profiler liste trenger vi bare å definere et felt av typen Liste og @ConfigurationProperties merknader vil ta seg av resten.

Legg merke til at vi registrerer ApplicationProps klasse som en vanlig vårbønne som bruker @Komponent. Som et resultat kan vi injisere den i andre klasser på samme måte som alle andre vårbønner.

Til slutt injiserer vi ApplicationProps bønne i en testklasse og kontroller om vår profiler YAML-listen er riktig injisert som en Liste:

@ExtendWith (SpringExtension.class) @ContextConfiguration (initializers = ConfigFileApplicationContextInitializer.class) @EnableConfigurationProperties (value = ApplicationProps.class) class YamlSimpleListUnitTest {@Autowired private ApplicationProps applicationProps; @Test offentlig ugyldig nårYamlList_thenLoadSimpleList () {assertThat (applicationProps.getProfiles (). Get (0)). IsEqualTo ("dev"); assertThat (applicationProps.getProfiles (). get (4) .getClass ()). isEqualTo (Integer.class); assertThat (applicationProps.getProfiles (). størrelse ()). erEqualTo (5); }}

4. Bindende YAML-lister til komplekse lister

La oss nå dykke dypere og se hvordan vi injiserer nestede YAML-lister i komplekse strukturerte Listes.

La oss først legge til noen nestede lister til application.yml:

applikasjon: // ... rekvisitter: - navn: YamlList url: //yamllist.dev beskrivelse: Kartliste i Yaml til liste over objekter i Spring Boot - ip: 10.10.10.10 port: 8091 - e-post: [e-postbeskyttet] kontakt : //yamllist.dev/contact brukere: - brukernavn: administratorpassord: [e-postbeskyttet] @ roller: - LES - SKRIV - VIS - SLETT - brukernavn: gjestepassord: [e-postbeskyttet] roller: - VIS

I dette eksemplet skal vi binde Rekvisitter eiendom til en Liste. På samme måte kartlegger vi brukere inn i en Liste av Bruker gjenstander.

Siden hvert element i Rekvisitter oppføringen inneholder forskjellige nøkler, så kan vi injisere den som en Liste av Karts. Husk å sjekke ut artikkelen vår om hvordan du injiserer et kart fra en YAML-fil i Spring Boot.

derimot, i tilfelle av brukere, alle elementene deler de samme tastene, så for å forenkle kartleggingen, kan det hende vi trenger å lage en dedikert Bruker klasse for å kapsle nøklene som felt:

offentlig klasse ApplicationProps {// ... privat liste Rekvisitter; private List brukere; // getters and setters public static class User {private String username; privat strengpassord; private Listeroller; // getters og setters}}

Nå bekrefter vi at våre nestede YAML-lister er riktig kartlagt:

@ExtendWith (SpringExtension.class) @ContextConfiguration (initializers = ConfigFileApplicationContextInitializer.class) @EnableConfigurationProperties (value = ApplicationProps.class) class YamlComplexListsUnitTest {@Autowired private ApplicationProps applicationProps; @Test offentlig ugyldig nårYamlNestedLists_thenLoadComplexLists () {assertThat (applicationProps.getUsers (). Get (0) .getPassword ()). IsEqualTo ("[email protected] @"); assertThat (applicationProps.getProps (). get (0) .get ("name")). isEqualTo ("YamlList"); assertThat (applicationProps.getProps (). get (1) .get ("port"). getClass ()). isEqualTo (Integer.class); }}

5. Konklusjon

I denne opplæringen lærte vi hvordan vi kan kartlegge YAML-lister til Java Listes. Vi har også sjekket hvordan vi kan binde komplekse lister til tilpassede POJOer.

Som alltid er den fullstendige kildekoden for denne artikkelen tilgjengelig på GitHub.


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