2016-10-31 6 views
2

Я нашел туто для управления исключениями от this site. Так вот мой обработчик:Как передать данные обработчику исключения?

@Controller 
@RequestMapping("/adminrole") 
public class AdminRole { 

    ... 

    @ExceptionHandler({org.hibernate.exception.ConstraintViolationException.class}) 
    public ModelAndView handlePkDeletionException(Exception ex) { 

     ModelAndView model = new ModelAndView("errorPage"); 

     model.addObject("message", "customised message with data to display in error page"); 

     return model; 

    } 

} 

Теперь я хочу передать некоторые данные, например имя столбца первичного ключа вызывает исключение, к проводнику, чтобы отобразить специальное сообщение на странице ошибки. Итак, как передать эти данные обработчику?

ответ

5

Чтобы передать свои данные методу @ExceptionHandler, вам нужно поймать framework exceptions в уровне услуг, и бросить свой собственный custom exception, окружив с дополнительными данными.

Service слой: слой

public class MyAdminRoleService { 
    public X insert(AdminRole adminRole) { 
     try { 
      //code 
     } catch(ConstraintViolationException exe) { 
      //set customdata from exception 
      throw new BusinessException(customdata); 
     } 
    } 
} 

Контроллер:

@Controller 
@RequestMapping("/adminrole") 
public class AdminRole { 

    @ExceptionHandler({com.myproject.BusinessException.class}) 
     public ModelAndView handlePkDeletionException(BusinessException ex) { 
      String errorMessage = ex.getErrorMessage(); 
      ModelAndView model = new ModelAndView("errorPage"); 

      model.addObject("message", errorMessage); 

      return model; 

     } 
    } 

PS: Я взял ConstraintViolationException только в качестве примера, но вы можете применить ту же концепцию для любого которые вы хотели бы добавить дополнительные данные.