YAML til liste over objekter i Spring Boot

1. Oversigt

I denne korte vejledning skal vi se nærmere på hvordan man kortlægger en YAML-liste i en Liste i Spring Boot.

Vi starter først med lidt baggrund for, hvordan man definerer lister i YAML. Derefter graver vi dybere for at se, hvordan man binder YAML-lister til Listes af objekter.

2. Hurtig oversigt over lister i YAML

Kort sagt, YAML er en menneskelig læsbar dataserialiseringsstandard, der giver en kortfattet og klar måde at skrive konfigurationsfiler på. Det gode ved YAML er, at det understøtter flere datatyper som f.eks Listes, Korts og skalartyper.

Elementerne i en YAML-liste defineres ved hjælp af tegnet “-”, og de deler alle det samme indrykningsniveau:

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

Til sammenligning bruger den egenskabsbaserede ækvivalent indekser:

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

For flere eksempler, er du velkommen til at se på vores artikel om, hvordan du definerer lister og kort ved hjælp af YAML og egenskabsfiler.

Som en kendsgerning, den hierarkiske karakter af YAML forbedrer læsbarheden markant sammenlignet med egenskabsfiler. Et andet interessant træk ved YAML er muligheden for at definere forskellige egenskaber til forskellige fjederprofiler.

Det er værd at nævne, at Spring Boot giver understøttelse af YAML-konfiguration uden for kassen. Efter design indlæser Spring Boot konfigurationsegenskaber fra ansøgning.yml ved opstart uden ekstra arbejde.

3. Binding af en YAML-liste til en simpel Liste af objekter

Spring Boot leverer @ConfigurationProperties kommentar til forenkle logikken ved kortlægning af eksterne konfigurationsdata til en objektmodel.

I dette afsnit bruger vi @ConfigurationProperties at binde en YAML-liste til en Liste.

Vi starter med at definere en simpel liste i ansøgning.yml:

ansøgning: profiler: - dev - test - prod - 1 - 2

Derefter opretter vi en simpel ApplicationProps POJO til at holde logikken i at binde vores YAML-liste til en Liste afgenstande:

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

Det ApplicationProps klasse skal dekoreres med @ConfigurationProperties at udtrykke intentionen om at kortlægge alle YAML-egenskaberne med det specificerede præfiks til et objekt fra ApplicationProps.

For at binde profiler liste skal vi bare definere et felt af typen Liste og @ConfigurationProperties annotering tager sig af resten.

Bemærk, at vi registrerer ApplicationProps klasse som en normal Spring Bean ved hjælp af @Komponent. Som et resultat kan vi indsprøjte det i andre klasser på samme måde som enhver anden forårsbønne.

Endelig injicerer vi ApplicationProps bønne i en testklasse og kontroller, om vores profiler YAML-listen indsprøjtes korrekt som en Liste:

@ExtendWith (SpringExtension.class) @ContextConfiguration (initializers = ConfigFileApplicationContextInitializer.class) @EnableConfigurationProperties (value = ApplicationProps.class) klasse 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 ()). er EqualTo (5); }}

4. Binding af YAML-lister til komplekse lister

Lad os nu dykke dybere og se, hvordan man injicerer indlejrede YAML-lister i komplekse strukturerede Listes.

Lad os først tilføje nogle indlejrede lister til ansøgning.yml:

applikation: // ... rekvisitter: - navn: YamlList url: //yamllist.dev beskrivelse: Kortlægningsliste i Yaml til liste over objekter i Spring Boot - ip: 10.10.10.10 port: 8091 - e-mail: [email protected] kontakt : //yamllist.dev/contact-brugere: - brugernavn: administratoradgangskode: [e-mailbeskyttet] @ roller: - LÆS - OPSKRIV - VIS - SLET - brugernavn: gæsteadgangskode: [e-mailbeskyttet] roller: - VIS

I dette eksempel skal vi binde rekvisitter ejendom til en Liste. På samme måde kortlægger vi brugere ind i en Liste af Bruger genstande.

Da hvert element i rekvisitter indgangen har forskellige nøgler, så kan vi indsprøjte den som en Liste af Korts. Sørg for at tjekke vores artikel om, hvordan du injicerer et kort fra en YAML-fil i Spring Boot.

Imidlertid, i tilfælde af brugere, alle elementer deler de samme nøgler, så for at forenkle kortlægningen kan det være nødvendigt at oprette en dedikeret Bruger klasse for at indkapsle tasterne som felter:

offentlig klasse ApplicationProps {// ... privat liste rekvisitter; private List-brugere; // getters and setters public static class User {private String username; privat strengadgangskode; private listeroller; // getters og setters}}

Nu verificerer vi, at vores indlejrede YAML-lister er kortlagt korrekt:

@ExtendWith (SpringExtension.class) @ContextConfiguration (initializers = ConfigFileApplicationContextInitializer.class) @EnableConfigurationProperties (value = ApplicationProps.class) klasse 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. Konklusion

I denne vejledning lærte vi, hvordan man kortlægger YAML-lister til Java Listes. Vi kontrollerede også, hvordan vi binder komplekse lister til brugerdefinerede POJO'er.

Som altid er den komplette kildekode til denne artikel tilgængelig på GitHub.