yay servlet.xml neden olur Benim önleyicim, herhangi bir İlkbahardan önce çağrıldı Validator
ek açıklamasının ek açıklamalı denetleyici yöntemi. Amaç, doğrulama başarısız olursa, isteği doğrulamaktır, isteği farklı bir görünüme iletin. Bu genellikle çalışıyor. (!valid)
numaralı bir hata varsa, RequestDispatcher.forward
çağrılır. Bu, en sonunda hata görünümünü gösteren başka bir Spring denetleyici yönteminin çağrılmasına neden olur. Bu normal çalışır.Spring AOP yinelemeli aramaları
Sorun: Bazı Bahar denetleyicileri için
, benim RequestDispatcher en errorView
istek (invoke()
üzerinde adlandırılan ve üzeri alır) geri sonsuz döngü neden aynı yöntemle iletilir neden olur. Bunun nedeni, yay denetleyicisinin istek eşlemelerinin (aşağıya bakınız) nasıl ayarlandığından kaynaklanmaktadır.
Hata görünümü: @RequestMapping(value = URL, params="error")
Normal görünüm: İlk istek o istek parametreleri içinde 'devam' var yönlendirilir Yani @RequestMapping(value = URL, params="proceed")
. Sonra bir hata ve RequestDispatcher sorgu dizesinde 'error' parametresiyle görünümüne iletildiğinde, yukarıdaki "Hata görünümü" yöntemini iletmesi gerekir, ancak olmaz. Her zaman, MethodInterceptor invoke()
'da sonsuz bir döngüye neden olan 'devam' yöntemine doğru ilerler. Bunun nedeni, 'devam' parametresinin HttpServletRequest'de kalmasıdır. Ancak bu, sabitlenmesi kolay değildir çünkü önleyicinin tüm noktası, yay denetleyicisinin kendisinin hiçbir bilgisi olmadığıdır - yalnızca bir hatanın oluşup oluşmadığını ve bir hata oluştuğunda hata görünümüne yönlendirmesi gerektiğini bilir.
Çözüm: Aşağıdaki istek eşleştirmeleri kullanma
, bu sorunu giderir. Bunun nedeni büyük olasılıkla, anahtar = değer gösterimi kullanılırken HttpServletRequest
parametresinin üzerine yazılmasıdır.
Hata görünümü: @RequestMapping(value = URL, params="view=error")
Normal görünüm: @RequestMapping(value = URL, params="view=proceed")
Soru
nasıl "düzgün" Yukarıda gösterilen geçici çözüm başvurmadan sorunu çözebilirsiniz? Doğru yay denetleyicisine iletmek için daha standart bir yol var mı?
Tüm kaynak kodlarını github veya ** MethodInterceptor invoke() ** ile daha ayrıntılı olarak paylaşabilir misiniz? – CrawlingKid