YAML ke Daftar Objek di Spring Boot

1. Ikhtisar

Dalam tutorial singkat ini, kita akan melihat lebih dekat bagaimana memetakan daftar YAML ke dalam List di Spring Boot .

Kami pertama-tama akan mulai dengan beberapa latar belakang tentang cara menentukan daftar di YAML. Kemudian, kita akan menggali lebih dalam untuk melihat bagaimana mengikat daftar YAML ke Daftar objek.

2. Rekap Cepat Tentang Daftar di YAML

Singkatnya, YAML adalah standar serialisasi data yang dapat dibaca manusia yang menyediakan cara yang ringkas dan jelas untuk menulis file konfigurasi. Hal yang baik tentang YAML adalah kenyataan bahwa ia mendukung beberapa tipe data seperti tipe List , Map , dan scalar .

Elemen dalam daftar YAML ditentukan menggunakan karakter “-” dan semuanya memiliki tingkat indentasi yang sama:

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

Sebagai perbandingan, persamaan berbasis properti menggunakan indeks:

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

Untuk contoh lainnya, silakan lihat artikel kami tentang cara menentukan daftar dan peta menggunakan YAML dan file properti.

Faktanya, sifat hierarki YAML secara signifikan meningkatkan keterbacaan dibandingkan dengan file properti . Fitur menarik lainnya dari YAML adalah kemungkinan untuk menentukan properti yang berbeda untuk profil Spring yang berbeda.

Perlu disebutkan bahwa Spring Boot menyediakan dukungan out-of-box untuk konfigurasi YAML. Secara desain, Spring Boot memuat properti konfigurasi dari application.yml saat startup tanpa pekerjaan tambahan.

3. Mengikat Daftar YAML ke Daftar Objek Sederhana

Spring Boot menyediakan anotasi @ConfigurationProperties untuk menyederhanakan logika pemetaan data konfigurasi eksternal ke dalam model objek .

Di bagian ini, kita akan menggunakan @ConfigurationProperties untuk mengikat daftar YAML ke dalam Daftar .

Kita mulai dengan mendefinisikan daftar sederhana di application.yml :

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

Kemudian, kita akan menciptakan sebuah sederhana ApplicationProps POJO untuk memegang logika mengikat daftar YAML kami ke Daftar daribenda:

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

Kelas ApplicationProps perlu didekorasi dengan @ConfigurationProperties untuk menyatakan maksud pemetaan semua properti YAML dengan awalan yang ditentukan ke objek ApplicationProps .

Untuk mengikat daftar profil, kita hanya perlu menentukan bidang jenis Daftar dan anotasi @ConfigurationProperties akan menangani sisanya.

Perhatikan bahwa kita mendaftarkan kelas ApplicationProps sebagai kacang Spring biasa menggunakan @Component . Hasilnya, kita bisa menyuntikkannya ke kelas lain dengan cara yang sama seperti kacang Spring lainnya.

Terakhir, kami menyuntikkan kacang ApplicationProps ke dalam kelas pengujian dan memverifikasi apakah daftar YAML profil kami dimasukkan dengan benar sebagai Daftar :

@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 Daftar YAML ke Daftar Kompleks

Sekarang, mari kita menyelam ini lebih dalam dan melihat bagaimana menyuntikkan bersarang daftar YAML ke kompleks terstruktur Daftar s .

Pertama, mari tambahkan beberapa daftar 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 properti props ke List . Demikian pula, kita akan memetakan pengguna ke dalam Daftar dari Pengguna benda.

Karena setiap elemen dari alat peraga masuk memegang kunci yang berbeda, maka kita dapat menyuntikkan sebagai Daftar dari Peta s . Pastikan untuk memeriksa artikel kami tentang cara menyuntikkan peta dari file YAML di Spring Boot .

Namun , dalam kasus pengguna , semua item berbagi kunci yang sama, jadi untuk menyederhanakan pemetaannya, kita mungkin perlu membuat kelas Pengguna khusus untuk merangkum kunci sebagai bidang:

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 memverifikasi bahwa daftar YAML bertingkat kami dipetakan dengan benar:

@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, kita belajar bagaimana memetakan daftar YAML ke dalam Daftar Java . Kami juga memeriksa cara mengikat daftar kompleks ke POJO kustom.

Seperti biasa, kode sumber lengkap untuk artikel ini tersedia di GitHub.