Rumah > Java > javaTutorial > Pengecualian dalam Musim Bunga: bagaimana untuk menjinakkan kesilapan anda

Pengecualian dalam Musim Bunga: bagaimana untuk menjinakkan kesilapan anda

DDD
Lepaskan: 2024-11-03 09:41:30
asal
286 orang telah melayarinya

Jadi, anda melaksanakan Spring ke dalam projek anda, dan kemudian, mengikut undang-undang Murphy, pengecualian muncul. Tetapi jangan panik—Spring mempunyai keupayaan pengendalian ralat yang hebat! Mari kita fikirkan dengan tepat cara anda boleh menggunakan ciri ini.

Pengecualian yang Ditanda dan Tidak Ditanda: kenapa semuanya mengelirukan?

Исключения в Spring: как приручить свои ошибки

Java membahagikan pengecualian kepada dua jenis: ditandai dan dinyahtanda. Pengecualian yang diperiksa memerlukan pengendalian yang jelas. Bayangkan dua persimpangan dengan orang berjalan melaluinya. Satu lintasan dikawal oleh pemeriksa yang ketat dengan tanda "Kawalan Ketat". Setiap orang diperiksa di sini, dan jika dia tidak mempunyai kebenaran untuk lulus, dia tidak akan dibenarkan masuk. Peralihan ini adalah serupa dengan pengecualian yang diperiksa: ia memerlukan pemprosesan mandatori, jika tidak, program tidak akan disusun.

Peralihan kedua, sebaliknya, tidak dikawal. Orang ramai melaluinya dengan bebas dan cepat, tanpa sebarang pemeriksaan. Ini adalah sama dengan pengecualian yang tidak disemak: pengecualian tersebut tidak memerlukan pengendalian, dan kod boleh dijalankan walaupun tanpa pemeriksaan ralat. Walau bagaimanapun, sekiranya berlaku ralat, ia akan muncul secara tidak dijangka - betul-betul di "jalan".

public void someMethod() throws IOException { 
    throw new IOException("Oops, checked exception!");
}

Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

@ExceptionHandler: apabila pepijat mendapat layanan VIP

@ExceptionHandler ialah "bouncer" peribadi anda sendiri yang menangkap dan mengendalikan pengecualian hanya untuk kaedah atau kelas tertentu. Jika anda ingin memberikan layanan VIP kepada ralat tertentu, berikan anotasi kaedah dengan @ExceptionHandler dan nikmati.

public void someMethod() throws IOException { 
    throw new IOException("Oops, checked exception!");
}

Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Kini, apabila ResourceNotFoundException ditemui, pengendali anda secara senyap-senyap akan mencetak mesej mesra dan bukannya pengguna melihat timbunan ralat yang menakutkan.

@ControllerAdvice: bila hendak memberi nasihat kiri dan kanan

Jika @ExceptionHandler hanya berfungsi untuk kelas tertentu, maka @ControllerAdvice ialah raja dalam barisan. Anotasi ini merangkumi semua pengawal, jadi pepijat tidak akan tergelincir lagi!

Исключения в Spring: как приручить свои ошибки

    @ExceptionHandler(ResourceNotFoundException.class)
    public ResponseEntity<String> handleResourceNotFound(ResourceNotFoundException ex) {
        return new ResponseEntity<>("Resource not found: " + ex.getMessage(), HttpStatus.NOT_FOUND);
    }

Salin selepas log masuk
Salin selepas log masuk

Dengan kod ini, semua ralat yang tidak ditangkap akan ditangkap dan diproses dengan satu mesej. Ia seperti tetapan "Termasuk Semua" untuk pengecualian - mudah dan selamat.

@ResponseStatus: apabila anda ingin menjadikan pengecualian lebih ekspresif

Kadangkala status HTTP standard tidak cukup menangkap intipati pengecualian. Tetapi dengan @ResponseStatus anda boleh memaksa pengecualian untuk menjadi lebih ekspresif.

Исключения в Spring: как приручить свои ошибки

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleGlobalException(Exception ex) {
        return new ResponseEntity<>("Oops, something went wrong!", HttpStatus.INTERNAL_SERVER_ERROR);
    }
}
Salin selepas log masuk

Kini, apabila ResourceNotFoundException dilemparkan, Spring akan mengembalikan status 404 secara automatik, tanpa memaksa anda melakukannya secara manual. Cara yang bagus untuk menambah drama, bukan?

@RestControllerAdvice: untuk pencinta REHAT

@RestControllerAdvice adalah seperti @ControllerAdvice, tetapi khusus untuk pengawal REST. Iaitu, ini adalah pilihan terbaik anda untuk mencipta API kerana ia mengembalikan JSON dan bukannya halaman HTML. Sokongan untuk peminat REST sebenar!

Исключения в Spring: как приручить свои ошибки

public void someMethod() throws IOException { 
    throw new IOException("Oops, checked exception!");
}

Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Pendekatan ini memastikan pengguna anda sentiasa menerima respons berstruktur dalam format JSON, menjadikan API anda lebih mesra pengguna.

Pengecualian tersuai: apabila yang standard tidak mencukupi

Исключения в Spring: как приручить свои ошибки

Pada satu ketika, anda menyedari bahawa Exception standard dan RuntimeException semata-mata tidak menyatakan tragedi penuh situasi anda. Nah, buat pengecualian anda sendiri! Pengecualian tersuai menambah sedikit keperibadian dan Spring masih mengendalikannya dengan penuh hormat.

    @ExceptionHandler(ResourceNotFoundException.class)
    public ResponseEntity<String> handleResourceNotFound(ResourceNotFoundException ex) {
        return new ResponseEntity<>("Resource not found: " + ex.getMessage(), HttpStatus.NOT_FOUND);
    }

Salin selepas log masuk
Salin selepas log masuk

Buat pengendali untuknya dan pengguna aplikasi anda akan melihat mesej yang jelas, dan bukan sekumpulan garis yang menakutkan.

Kesimpulan
Ralat pengendalian dalam Musim Bunga adalah sedikit seni. Daripada pemprosesan peringkat kaedah kepada pemprosesan global, daripada respons JSON kepada status tersuai, kemungkinannya sangat besar.

Jadi, ambil @ExceptionHandler, @ControllerAdvice dan @ResponseStatus, dan ubah pengecualian menjadi kelas induk dalam pengurusan ralat. Spring sedia membantu anda menangani sebarang ralat dan menyelamatkan muka di hadapan pengguna

Atas ialah kandungan terperinci Pengecualian dalam Musim Bunga: bagaimana untuk menjinakkan kesilapan anda. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan