YAML ke Senarai Objek di Spring Boot

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kita akan melihat lebih dekat bagaimana memetakan senarai YAML ke dalam List in Spring Boot .

Mula-mula kita mulakan dengan beberapa latar belakang mengenai cara menentukan senarai di YAML. Kemudian, kami akan menggali lebih dalam untuk melihat bagaimana untuk mengikat senarai YAML ke Senarai s objek.

2. Ringkasan Cepat Mengenai Daftar di YAML

Ringkasnya, YAML adalah standard penyirian data yang dapat dibaca oleh manusia yang menyediakan cara ringkas dan jelas untuk menulis fail konfigurasi. Perkara yang baik mengenai YAML adalah kenyataan bahawa ia menyokong pelbagai jenis data seperti jenis List s, Map s, dan skalar .

Elemen dalam senarai YAML didefinisikan menggunakan watak "-" dan semuanya berkongsi tahap lekukan yang sama:

yamlconfig: list: - item1 - item2 - item3 - item4

Sebagai perbandingan, setara berdasarkan sifat menggunakan indeks:

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

Untuk lebih banyak contoh, sila lihat artikel kami tentang cara menentukan senarai dan peta menggunakan YAML dan fail sifat.

Sebenarnya, sifat hierarki YAML secara signifikan meningkatkan kebolehbacaan berbanding fail sifat . Satu lagi ciri menarik YAML adalah kemungkinan untuk menentukan sifat yang berbeza untuk profil Spring yang berbeza.

Perlu disebutkan bahawa Spring Boot memberikan sokongan luar kotak untuk konfigurasi YAML. Dengan reka bentuk, Spring Boot memuatkan sifat konfigurasi dari application.yml pada permulaan tanpa kerja tambahan.

3. Mengikat Senarai YAML ke Senarai Objek Mudah

Spring Boot menyediakan anotasi @ConfigurationProperties untuk mempermudah logik pemetaan data konfigurasi luaran ke dalam model objek .

Di bahagian ini, kami akan menggunakan @ConfigurationProperties untuk mengikat senarai YAML ke dalam Senarai .

Kita mulakan dengan menentukan senarai ringkas dalam application.yml :

application: profiles: - dev - test - prod - 1 - 2

Kemudian, kita akan membuat mudah ApplicationProps Pojo untuk memegang logik mengikat senarai YAML kami kepada Senarai daripadaobjek:

@Component @ConfigurationProperties(prefix = "application") public class ApplicationProps { private List profiles; // getter and setter }

The ApplicationProps keperluan kelas untuk dihiasi dengan @ConfigurationProperties untuk menyatakan niat untuk pemetaan semua sifat-sifat YAML dengan awalan yang dinyatakan untuk objek ApplicationProps .

Untuk mengikat senarai profil, kita hanya perlu menentukan bidang jenis Senarai dan anotasi @ConfigurationProperties akan menguruskan yang lain.

Perhatikan bahawa kami mendaftarkan kelas ApplicationProps sebagai Spring bean biasa menggunakan @Component . Hasilnya, kita dapat memasukkannya ke kelas lain dengan cara yang sama seperti kacang kacang yang lain.

Akhirnya, kami menyuntikkan kacang ApplicationProps ke kelas ujian dan mengesahkan sama ada senarai YAML profil kami disuntik dengan betul sebagai Senarai :

@ExtendWith(SpringExtension.class) @ContextConfiguration(initializers = ConfigFileApplicationContextInitializer.class) @EnableConfigurationProperties(value = ApplicationProps.class) class YamlSimpleListUnitTest { @Autowired private ApplicationProps applicationProps; @Test public void whenYamlList_thenLoadSimpleList() { assertThat(applicationProps.getProfiles().get(0)).isEqualTo("dev"); assertThat(applicationProps.getProfiles().get(4).getClass()).isEqualTo(Integer.class); assertThat(applicationProps.getProfiles().size()).isEqualTo(5); } }

4. Mengikat Senarai YAML ke Daftar Kompleks

Sekarang, mari menyelam yang lebih mendalam dan melihat bagaimana untuk menyuntik senarai YAML bersarang ke dalam kompleks berstruktur Senarai s .

Pertama, mari tambahkan beberapa senarai bersarang ke application.yml :

application: // ... props: - name: YamlList url: //yamllist.dev description: Mapping list in Yaml to list of objects in Spring Boot - ip: 10.10.10.10 port: 8091 - email: [email protected] contact: //yamllist.dev/contact users: - username: admin password: [email protected]@ roles: - READ - WRITE - VIEW - DELETE - username: guest password: [email protected] roles: - VIEW

Dalam contoh ini, kita akan mengikat harta alat peraga ke Senarai . Begitu juga, kami akan map pengguna ke dalam Senarai daripada pengguna objek.

Oleh kerana setiap unsur prop kemasukan memegang kunci yang berbeza, maka kita boleh menyuntik sebagai List of Peta s . Pastikan anda melihat artikel kami mengenai cara menyuntik peta dari fail YAML di Spring Boot .

Walau bagaimanapun , bagi pengguna , semua item mempunyai kunci yang sama, jadi untuk mempermudah pemetaannya, kami mungkin perlu membuat kelas Pengguna khusus untuk memasukkan kunci sebagai medan:

public class ApplicationProps { // ... private List props; private List users; // getters and setters public static class User { private String username; private String password; private List roles; // getters and setters } }

Sekarang kami mengesahkan bahawa senarai YAML bersarang kami dipetakan dengan betul:

@ExtendWith(SpringExtension.class) @ContextConfiguration(initializers = ConfigFileApplicationContextInitializer.class) @EnableConfigurationProperties(value = ApplicationProps.class) class YamlComplexListsUnitTest { @Autowired private ApplicationProps applicationProps; @Test public void whenYamlNestedLists_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. Kesimpulan

Dalam tutorial ini, kami belajar bagaimana memetakan daftar YAML ke dalam Java List s. Kami juga memeriksa cara mengikat senarai kompleks dengan POJO tersuai.

Seperti biasa, kod sumber lengkap untuk artikel ini terdapat di GitHub.