Istisnolar

All lectures for UZ purposes
Daraja, Dars
Mavjud

Agar istisno so'rov ko'rsatilishi paytida yoki so'rovni qayta ishlovchi (masalan, @Controller bilan annotatsiyalangan) koderator tomonidan chiqarilsa, DispatcherServlet istisnoni tanib olish va odatda xato xabari bo'lgan alternativ ishlov berishni ta'minlash uchun HandlerExceptionResolver zanjiriga vakolatlarni topshiradi.

Quyidagi jadvalda HandlerExceptionResolver ning mavjud o'rnatmalari keltirilgan:

Jadval 2. HandlerExceptionResolver o'rnatmalari
HandlerExceptionResolver Tavsif

SimpleMappingExceptionResolver

Istisno sinflarining nomlari va xato ko'rinishlari nomlari orasidagi moslik. Bu brauzer ilovasida xato sahifalari ko'rsatilishi uchun ishlatiladi.

DefaultHandlerExceptionResolver

Spring MVC tomonidan chaqirilgan istisnolarni tanib olish va ularni HTTP holat kodlariga ko'rsatish. Shuningdek, alternativ ResponseEntityExceptionHandler ni ham ko'ring.

ResponseStatusExceptionResolver

@ResponseStatus annotatsiyalangan istisnolarni tanib olish va ularni annotatsiyadagi qiymat asosida HTTP holat kodlariga ko'rsatish.

ExceptionHandlerExceptionResolver

@Controller yoki @ControllerAdvice bilan annotatsiyalangan sinfda @ExceptionHandler annotatsiyalangan metodni chaqirib, istisnolarni tanib olish.

Tanib oluvchilar zanjiri

Bir nechta HandlerExceptionResolver binlarni Spring konfiguratsiyasida e'lon qilib va ularning order xususiyatlarini kerakli tarzda sozlab istisno tanib oluvchilar zanjirini yarata olasiz. Qanchalik buyurtma xususiyati yuqori bo'lsa, istisno tanib oluvchi shunchalik uzoqda joylashgan.

HandlerExceptionResolver shartnomasi, u quyidagilarni qaytarishi mumkinligini belgilaydi:

  • Xato ko'rinishiga ishora qiluvchi ModelAndView.

  • Qayta ishlov beruvchi ichida istisno qayta ishlangan bo'lsa, bo'sh ModelAndView.

  • Agar istisno tanib olinmagan bo'lsa null, keyingi urinishlar uchun tanib oluvchilar tomonidan qilinadi, lekin oxir-oqibat istisno qolsa, u servlet konteynerga qabul qilinadi.

MVC konfiguratsiyasi Spring MVC uchun istisno tanib oluvchilarni, @ResponseStatus bilan annotatsiyalangan istisnolarni va @ExceptionHandler bilan annotatsiyalangan metodlarni qo'llab-quvvatlash uchun avtomatik ravishda o'rnatadi. Bu ro'yxatni o'zgartirish yoki almashtirish mumkin.

Konteynerning xato sahifasi

Agar istisno biron-bir HandlerExceptionResolver tomonidan tanib olinmasa va shuning uchun davom etsa yoki javob holati xato (ya'ni 4xx, 5xx) holatiga o'rnatilsa, servlet konteynerlari HTML bo'yicha standart xato sahifasini ko'rsatishi mumkin. Konteynerning xato sahifasini sozlash uchun web.xml da xato sahifasi ko'rsatmasini e'lon qilish mumkin. Quyidagi misolda buni qanday qilish ko'rsatilgan:

<error-page>
    <location>/error</location>
</error-page>

Yuqoridagi misolni hisobga olganda, agar istisno yuzaga kelsa yoki javob xato holatiga ega bo'lsa, servlet konteyner /error URL manzilini ichida ERROR yuboradi. Keyin bu barcha DispatcherServlet tomonidan ko'rsatilgan anotatsiyaga ko'ra, muqobil xato ko'rinishi nomini modeli bilan qaytarish uchun yoki JSON formatida javob chiqarish uchun amalga oshirilgan @Controller bilan amalga oshirilgan, quyidagi misolda ko'rsatilganidek:

Java
@RestController
public class ErrorController {
    @RequestMapping(path = "/error")
    public Map<String, Object> handle(HttpServletRequest request) {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("status", request.getAttribute("javax.servlet.error.status_code"));
        map.put("reason", request.getAttribute("javax.servlet.error.message"));
        return map;
    }
}
Kotlin
@RestController
class ErrorController {
    @RequestMapping(path = ["/error"])
    fun handle(request: HttpServletRequest): Map<String, Any> {
        val map = HashMap<String, Any>()
        map["status"] = request.getAttribute("javax.servlet.error.status_code")
        map["reason"] = request.getAttribute("javax.servlet.error.message")
        return map
    }
}
Servlet API Java da xato sahifalarini yaratish imkoniyatini ta'minlamaydi. Biroq, WebApplicationInitializer yoki oddiy web.xml dan foydalanish mumkin.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION