MessageSource Validasi Kustom di Spring Boot

1. Ikhtisar

MessageSource adalah fitur canggih yang tersedia di aplikasi Spring. Ini membantu pengembang aplikasi menangani berbagai skenario kompleks dengan menulis banyak kode tambahan, seperti konfigurasi khusus lingkungan, internasionalisasi, atau nilai yang dapat dikonfigurasi.

Satu skenario lagi dapat mengubah pesan validasi default menjadi pesan yang lebih ramah pengguna / kustom.

Dalam tutorial ini, kita akan melihat cara mengonfigurasi dan mengelola validasi kustom MessageSource di aplikasi menggunakan Spring Boot .

2. Ketergantungan Maven

Mari kita mulai dengan menambahkan dependensi Maven yang diperlukan:

 org.springframework.boot spring-boot-starter-web   org.springframework.boot spring-boot-starter-validation 

Anda dapat menemukan versi terbaru dari perpustakaan ini di Maven Central.

3. Contoh Pesan Validasi Kustom

Mari kita pertimbangkan skenario di mana kita harus mengembangkan aplikasi yang mendukung banyak bahasa. Jika pengguna tidak memberikan detail yang benar sebagai masukan, kami ingin menampilkan pesan kesalahan sesuai dengan lokal pengguna.

Mari kita ambil contoh kacang formulir Login:

public class LoginForm { @NotEmpty(message = "{email.notempty}") @Email private String email; @NotNull private String password; // standard getter and setters }

Di sini kami telah menambahkan batasan validasi yang memverifikasi jika email tidak disediakan sama sekali, atau disediakan, tetapi tidak mengikuti gaya alamat email standar.

Untuk menampilkan pesan khusus dan khusus lokal, kita bisa menyediakan placeholder seperti yang disebutkan untuk anotasi @NotEmpty .

The email.notempty properti akan diselesaikan dari file properti oleh MessageSource konfigurasi.

4. Mendefinisikan MessageSource Bean

Konteks aplikasi mendelegasikan resolusi pesan ke kacang dengan nama messageSource yang tepat .

ReloadableResourceBundleMessageSource adalah implementasi MessageSource paling umum yang menyelesaikan pesan dari paket sumber daya untuk lokal yang berbeda:

@Bean public MessageSource messageSource() { ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); messageSource.setBasename("classpath:messages"); messageSource.setDefaultEncoding("UTF-8"); return messageSource; }

Di sini, penting untuk memberikan nama dasar karena nama file khusus lokal akan diselesaikan berdasarkan nama yang diberikan.

5. Mendefinisikan LocalValidatorFactoryBean

Untuk menggunakan pesan nama kustom dalam file properti seperti kita perlu mendefinisikan LocalValidatorFactoryBean dan mendaftarkan messageSource:

@Bean public LocalValidatorFactoryBean getValidator() { LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean(); bean.setValidationMessageSource(messageSource()); return bean; }

Namun, perhatikan bahwa jika kita telah memperluas WebMvcConfigurerAdapter , untuk menghindari validator khusus diabaikan, kita harus menyetel validator dengan mengganti metode getValidator () dari kelas induk.

Sekarang kita dapat mendefinisikan pesan properti seperti:

Email.notempty =”

dari pada

“Javax.validation.constraints.NotEmpty.message =”

6. Mendefinisikan File Properti

Langkah terakhir adalah membuat file properti di direktori src / main / resources dengan nama yang diberikan di basename di langkah 4:

# messages.properties email.notempty=Please provide valid email id.

Di sini kita bisa memanfaatkan internasionalisasi bersamaan dengan ini. Katakanlah kami ingin menampilkan pesan untuk pengguna Prancis dalam bahasa mereka.

Dalam kasus ini, kita harus menambahkan satu file properti lagi dengan nama messages_fr.properties di lokasi yang sama (Tidak diperlukan perubahan kode sama sekali):

# messages_fr.properties email.notempty=Veuillez fournir un identifiant de messagerie valide.

7. Kesimpulan

Pada artikel ini, kami membahas bagaimana pesan validasi default dapat diubah tanpa memodifikasi kode jika konfigurasi dilakukan dengan benar sebelumnya.

Kami juga dapat memanfaatkan dukungan internasionalisasi bersama dengan ini untuk membuat aplikasi lebih ramah pengguna.

Seperti biasa, kode sumber lengkap tersedia di GitHub.