Barcha HandlerMapping implementatsiyalari handler interceptors ni qo'llab-quvvatlaydi, bu maxsus funksionallikni ma'lum so'rovlarga qo'llashda foyda keltiradi - masalan, asosiy so'rovning mavjudligini tekshirish. Interceptors org.springframework.web.servlet paketidagi HandlerInterceptor ni implementatsiya qilishi kerak bo'lib, uchta metodni ta’minlashi lozim, ular barcha turdagi oldingi va post ishlov berishlarni bajarish uchun yetarlicha moslashuvchanlikni ta’minlashi kerak:
-
preHandle(..): Asl handler bajarishidan oldin -
postHandle(..): Handler bajarilishidan keyin -
afterCompletion(..): So'rov bajarilishi tugagandan keyin
preHandle(..) metodi boolean qiymatni qaytaradi. Ushbu metodni ishlatib, bajarilish zanjirini to'xtatish yoki davom ettirish mumkin. Agar ushbu metod true qaytarsa, handler zanjiri bajarilishi davom etadi. Agar false qaytarilsa, DispatcherServlet qabul qiladi, yoki interceptors o'zi so'rovlar bilan ishlangan deb (va masalan, mos ko'rinishni ko'rsatgan), va bajarilish zanjiridagi boshqa interceptors va asl handlerni bajarishni davom ettirmaydi.
Shuningdek, ularni to'g'ridan-to'g'ri HandlerMapping ning alohida implementatsiyalarida setter lar yordamida ro'yxatdan o'tkazish mumkin.
postHandle metodi @ResponseBody annotatsiyasi bilan belgilangan metodlar va ResponseEntity uchun unchalik foydali emas, chunki xabar HandlerAdapter ning ichida yoziladi va amalga oshiriladi hamda postHandle dan oldin. Bu shuni anglatadiki, xabarni o'zgartirish, masalan, qo'shimcha sarlavha qo'shish uchun juda kech bo'ladi. Bunday holatlar uchun, ResponseBodyAdvice ni implementatsiya qilish va uni maslahatchi (Advice) controller Bean sifatida e'lon qilish yoki uni to'g'ridan -to'g'ri RequestMappingHandlerAdapter uchun sozlash mumkin.
GO TO FULL VERSION