Sumber Pengesahan TersuaiSumber dalam Spring Boot

1. Gambaran keseluruhan

MessageSource adalah ciri kuat yang terdapat dalam aplikasi Spring. Ini membantu pembangun aplikasi menangani pelbagai senario kompleks dengan menulis banyak kod tambahan, seperti konfigurasi khusus persekitaran, pengantarabangsaan atau nilai yang dapat dikonfigurasi.

Satu lagi senario ialah memodifikasi mesej pengesahan lalai kepada lebih banyak pesanan mesra pengguna / pesanan khusus.

Dalam tutorial ini, kita akan melihat cara mengkonfigurasi dan mengelola validasi tersuai MessageSource dalam aplikasi menggunakan Spring Boot .

2. Pergantungan Maven

Mari mulakan dengan menambahkan kebergantungan Maven yang diperlukan:

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

Anda boleh mendapatkan versi terbaru perpustakaan ini di Maven Central.

3. Contoh Mesej Pengesahan Tersuai

Mari pertimbangkan senario di mana kita harus mengembangkan aplikasi yang menyokong pelbagai bahasa. Sekiranya pengguna tidak memberikan perincian yang betul sebagai input, kami ingin menunjukkan mesej ralat sesuai dengan lokasi pengguna.

Mari kita ambil contoh kacang borang 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 pengesahan yang mengesahkan sama ada e-mel sama sekali tidak disediakan, atau disediakan, tetapi tidak mengikut gaya alamat e-mel standard.

Untuk menunjukkan mesej khusus dan khusus tempatan, kami dapat memberikan placeholder seperti yang disebutkan untuk anotasi @NotEmpty .

The email.notempty harta akan diselesaikan dari ciri-ciri fail oleh MessageSource konfigurasi.

4. Mendefinisikan Bean MessageSource

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

ReloadableResourceBundleMessageSource adalah perkara biasa yang paling MessageSource pelaksanaan yang ketetapan pesanan dari berkas sumber untuk lokasi yang berbeza:

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

Di sini, penting untuk memberikan nama asas kerana nama fail khusus tempat akan diselesaikan berdasarkan nama yang diberikan.

5. Mendefinisikan LocalValidatorFactoryBean

Untuk menggunakan mesej nama khas dalam fail sifat seperti kita perlu menentukan LocalValidatorFactoryBean dan mendaftarkan pesanSumber:

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

Namun, perhatikan bahawa jika kita telah memperluas WebMvcConfigurerAdapter , untuk mengelakkan pengesahan kustom diabaikan, kita harus menetapkan validator dengan mengesampingkan kaedah getValidator () dari kelas induk.

Sekarang kita dapat menentukan mesej harta tanah seperti:

"E- mel.notempty ="

bukannya

"Javax.validation.constraints.NotEmpty.message ="

6. Mendefinisikan Fail Harta

Langkah terakhir adalah membuat fail sifat dalam direktori src / main / resources dengan nama yang disediakan dalam nama asas pada langkah 4:

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

Di sini kita dapat memanfaatkan pengantarabangsaan seiring dengan ini. Katakan kita mahu menunjukkan mesej untuk pengguna Perancis dalam bahasa mereka.

Dalam kes ini, kita harus menambahkan satu lagi fail harta tanah dengan nama message_fr.properties di lokasi yang sama (Tidak perlu perubahan kod sama sekali):

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

7. Kesimpulannya

Dalam artikel ini, kami membahas bagaimana pesan pengesahan lalai dapat diubah tanpa mengubah kod jika konfigurasi dilakukan dengan betul sebelumnya.

Kami juga dapat memanfaatkan sokongan pengantarabangsaan dengan ini untuk menjadikan aplikasi lebih mesra pengguna.

Seperti biasa, kod sumber penuh tersedia di GitHub.