


Cara Terbaik untuk Mengendalikan Penyetempatan Untuk Mesej Pengecualian dalam Spring Boot
Apabila aplikasi berkembang untuk melayani khalayak global, penyetempatan menjadi aspek penting dalam pembangunan perisian. Penyetempatan membolehkan aplikasi menyesuaikan diri dengan bahasa dan wilayah yang berbeza, memberikan pengalaman yang mesra pengguna.
Dalam artikel ini, saya akan berkongsi cara kegemaran saya untuk mengendalikan pengecualian setempat dalam aplikasi Spring Boot.
Mengapa Kami Memerlukan Penyetempatan untuk Mesej Pengecualian?
Penyetempatan mesej pengecualian di bahagian belakang adalah penting untuk mencipta pengalaman pengguna yang lancar, terutamanya dalam aplikasi yang menyasarkan khalayak global.
Dengan menyetempatkan mesej ini pada bahagian belakang dan menghantarnya terus ke bahagian hadapan, kami boleh mengambil tanggungjawab untuk menguruskan berbilang bahasa di luar bahu pembangun bahagian hadapan. Pendekatan ini memastikan bahawa mesej ralat adalah konsisten merentas semua platform dan bahasa, membolehkan pembangun bahagian hadapan menumpukan pada memaparkan mesej ini dengan cara yang mesra pengguna, seperti dalam roti bakar ralat.
Akibatnya, bahagian hadapan tidak perlu mengendalikan mesej pengecualian tersuai untuk setiap bahasa, mengurangkan pertindihan usaha dan potensi ralat serta memastikan semua pengguna menerima maklum balas yang jelas dan berkaitan dalam bahasa pilihan mereka.
Bagaimana untuk Mencapai Matlamat kami di Backend dengan Mudah?
Ikuti langkah di bawah untuk mencapai matlamat kami.
Kelas Pengecualian Am
Mulakan dengan mencipta kelas yang menjangkau daripada RuntimeException dan namakannya ResponseException. Pengecualian tersuai ini akan membolehkan anda mengendalikan ralat khusus aplikasi dengan cara yang lebih terkawal.
public class ResponseException extends RuntimeException { }
Kelas Ralat Balasan
Buat kelas berasingan yang akan dikembalikan dalam respons apabila pengecualian berlaku. Kelas ini boleh mengandungi medan seperti mesej, cap masa, kod ralat dan sebarang maklumat lain yang berkaitan yang anda ingin hantar ke bahagian hadapan.
public record ErrorResponse(int status, String message) { }
Pengendali Pengecualian Global
Laksanakan GlobalExceptionHandler menggunakan anotasi @ControllerAdvice Spring. Dalam kelas ini, anda boleh menangkap ResponseException dan memetakannya kepada mesej setempat yang sesuai berdasarkan tempat pengguna.
@Slf4j @RestControllerAdvice @RequiredArgsConstructor public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { @ExceptionHandler(value = ResponseException.class) public ResponseEntity<errorresponse> handleResponseStatusException( ResponseException ex ) { log.error("ResponseException: {}", ex.getMessage()); String message = ex.getMessage(); var errorResponse = new ErrorResponse(ex.getStatus().value(), message); return new ResponseEntity(errorResponse, ex.getStatus()); } } </errorresponse>
Fail Harta Khusus Bahasa
Untuk mengurus mesej setempat, buat fail sifat untuk setiap bahasa yang disokong, seperti messages_en.properties untuk bahasa Inggeris, messages_az.properties untuk Azerbaijan dan sebagainya. Fail ini akan mengandungi pasangan nilai kunci untuk setiap mesej pengecualian, membolehkan Spring menyelesaikan mesej yang betul secara automatik berdasarkan tempat pengguna.
Buat fail hartanah tersebut dalam folder src/main/resources.
err.username_already_exists.msg=User with username: {0} is already exists.
Laksanakan Bahagian Penyetempatan
Saya telah mencipta minimum untuk mengendalikan pengecualian dalam Spring Boot. Saya andaikan anda sudah biasa dengan perkara di atas. Mari teruskan menambah bahagian terjemahan.
Ubah suai kelas ResponseException:
public class ResponseException extends RuntimeException { private final String messageTemplate; private final transient Object[] params; private final Locale locale; public static ResponseException notFound(String messageTemplate, Locale locale) { return new ResponseException(HttpStatus.NOT_FOUND, messageTemplate, null, locale); } public static ResponseException notFound(String messageTemplate, Object[] params, Locale locale) { return new ResponseException(HttpStatus.NOT_FOUND, messageTemplate, params, locale); } public static ResponseException forbidden(String messageTemplate, Locale locale) { return new ResponseException(HttpStatus.FORBIDDEN, messageTemplate, null, locale); } public static ResponseException forbidden(String messageTemplate, Object[] params, Locale locale) { return new ResponseException(HttpStatus.FORBIDDEN, messageTemplate, params, locale); } }
Cipta kaedah pembantu untuk kod HttpStatus yang kerap digunakan seperti TIDAK_DAPAT, DILARANG.
Anda boleh menggunakan kaedah pembantu ini dengan cara berikut:
// some code parts omitted ... userService.findByUsername(username) .orElseThrow(() -> ResponseException.notFound("user_not_found", locale))
Buat templat mesej user_not_found dalam semua fail harta anda.
// file: messages_en.properties user_not_found=User not found // file: messages_az.properties user_not_found=İsdifadəçi tapılmadı
Untuk menggantikannya secara automatik sebelum kembali ke bahagian hadapan, kaedah kemas kini dalam kelas GlobalExceptionHandler.
@Slf4j @RestControllerAdvice @RequiredArgsConstructor public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { private final MessageSource messageSource; @ExceptionHandler(value = ResponseException.class) public ResponseEntity<errorresponse> handleResponseStatusException( ResponseException ex ) { log.error("ResponseException: {}", ex.getMessage()); String message = ex.getMessage(); String messageTemplate = ex.getMessageTemplate(); if (StringUtils.isNotBlank(messageTemplate)) { message = messageSource.getMessage(messageTemplate, ex.getParams(), ex.getLocale()); } var errorResponse = new ErrorResponse(ex.getStatus().value(), message); return new ResponseEntity(errorResponse, ex.getStatus()); } } </errorresponse>
Cara Menggunakan Nilai Dinamik dalam Mesej Pengecualian
Cara pengendalian pengecualian ini berguna terutamanya anda perlu menetapkan nilai dinamik untuk mesej pengecualian anda. Contohnya,
// file: messages_en.properties err.invalid_phone_number.msg=The phone: {0} is invalid
Untuk menggantikan {0} dengan nilai dinamik.
public static ResponseException badRequest( String messageTemplate, Locale locale, String... params ) { return new ResponseException( HttpStatus.BAD_REQUEST, messageTemplate, params, locale ); }
Saya telah meletakkan parameter varargs di penghujung untuk menghantar berbilang parameter dinamik tanpa membuat kaedah baharu setiap kali.
Saya mempunyai artikel khusus tentang Mesej dengan nilai Dinamik.
Di mana untuk Mendapatkan Tempat Pengguna?
Saya mempunyai dua pendekatan untuk mendapatkan tempat:
Tempat pengguna yang disimpan pada pangkalan data berdasarkan pilihan UI.
Sesetengah kaedah pengawal menerima parameter permintaan bahasa pilihan. Ini mungkin berguna untuk ujian apabila pembangun bahagian hadapan ingin melihat bagaimana UI akan berada dalam bahasa yang berbeza. Kerana panjang ayat dalam setiap bahasa tidak sama.
Kesimpulan
Itu sahaja untuk hari ini. Saya harap anda menikmati.
Kod sumber tersedia pada repositori dalam akaun GitHub saya.
Jika anda mempunyai sebarang pertanyaan, sila hubungi saya melalui LinkedIn.
Atas ialah kandungan terperinci Cara Terbaik untuk Mengendalikan Penyetempatan Untuk Mesej Pengecualian dalam Spring Boot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Bagaimanakah Java mengurangkan masalah khusus platform? Java melaksanakan platform bebas melalui JVM dan perpustakaan standard. 1) Gunakan bytecode dan JVM untuk abstrak perbezaan sistem operasi; 2) Perpustakaan standard menyediakan API silang platform, seperti laluan fail pemprosesan kelas Paths, dan pengekodan aksara pemprosesan kelas charset; 3) Gunakan fail konfigurasi dan ujian pelbagai platform dalam projek sebenar untuk pengoptimuman dan debugging.

Java'splatformindependenceEnhancesMicroservicesarchitectureByOfferingDeploymentflexability, konsistensi, skalabilitas, andPortability.1) DeploymentflexabilityAllowsMicroserviceStorunonAnanyplatformWithAjvm.2) ConsistencyAcsServicSservicesSimpliesDevelanDanDevelan

GraalVM meningkatkan kemerdekaan platform Java dalam tiga cara: 1. 2. Persekitaran Runtime Bebas, menyusun program Java ke dalam fail boleh laku tempatan melalui GraalvmnativeImage; 3. Pengoptimuman Prestasi, Graal Compiler menjana kod mesin yang cekap untuk meningkatkan prestasi dan konsistensi program Java.

Toeffectivelytestjavaapplicationsforplatformcompatebility, ikutiTheSesteps: 1) setupautomatedtestingacrossmultiplePlatformsusingcitoolslikejenkinsorgithubithubactions.2) conductManualtestingonrealhardwaretocatchiscatscienvironments.2)

Penyusun Java menyedari kemerdekaan platform Java dengan menukar kod sumber ke dalam bytecode bebas platform, yang membolehkan program Java dijalankan pada mana-mana sistem operasi dengan JVM dipasang.

BytecodeachievesplatformindependenceBebyBeingExecutedyavirtualMachine (VM), membolehkanCodeTorunonanyplatformWithTheAppropriatevm.Forexample, JavabytecodecanrunonanydeviceVmm, enabling "

Java tidak dapat mencapai kemerdekaan platform 100%, tetapi kemerdekaan platformnya dilaksanakan melalui JVM dan bytecode untuk memastikan kod tersebut berjalan pada platform yang berbeza. Pelaksanaan spesifik termasuk: 1. Kompilasi ke bytecode; 2. Tafsiran dan pelaksanaan JVM; 3. Konsistensi Perpustakaan Standard. Walau bagaimanapun, perbezaan pelaksanaan JVM, sistem operasi dan perbezaan perkakasan, dan keserasian perpustakaan pihak ketiga boleh menjejaskan kebebasan platformnya.

Java menyedari kemerdekaan platform melalui "Tulis sekali, jalankan di mana -mana" dan meningkatkan pemeliharaan kod: 1. Penggunaan semula kod tinggi dan mengurangkan pembangunan pendua; 2. Kos penyelenggaraan yang rendah, hanya satu pengubahsuaian yang diperlukan; 3. Kecekapan kerjasama pasukan tinggi adalah tinggi, mudah untuk perkongsian pengetahuan.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

Dreamweaver CS6
Alat pembangunan web visual

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.
