Projemizde run time esnasında çıkabilecek hataları daha açıklayıcı ve görsel anlamda da anlamsız kod karmaşasını ortadan kaldırmak için oluşabilecek hatalar için özel sayfalara yönlendirmeler yapalım dedik.İnternette yine her zamanki gibi türkçe kaynak kıtlığı yaşıyoruz... derken https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc adresinden detaylı bilgileri alıyoruz...İlgili kaynakta hataları yönetmenin farklı yollarından bahsediyor, kendi özel hata class'larıını da oluşturup, bağlı bulunduğu yerlerde o hatayı döndürebilirsiniz. Ben ise, daha global, tüm projeyi kapsayan bir hata yönetim şekliyle ilgileniyorum.
Yani;Size gerekli olan malzemeler,Bir adet class -ki @ControllerAdvice annotation'ına sahip olacakiçerisindeki metodlar ise @ExceptionHandlerbir adet hatanın işlenip daha düzgün görüntülenmesi için yönlendirileceği error.jsp sayfasıtabi mi context.xml tarafında da <mvc:annotation-driven/>'ın tanımlı olmasıBenim Controller tarafında tek kullandığım kod;
@ControllerAdvice
class GlobalExceptionHandler {
@ExceptionHandler(value = Exception.class)
public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null)
throw e;
// Otherwise setup and send the user to a default error-view.
ModelAndView mav = new ModelAndView();
mav.addObject("exception", e);
mav.addObject("url", req.getRequestURL());
mav.setViewName("error");
return mav;
}
}
@ExceptionHandler(value = Exception.class) içerisindeki değeri "SQLException.class", value=HttpStatus.NOT_FOUND şeklinde girerek hata türlerine göre yeni metodlar da oluşturabilirsiniz.