我找到了一个tuto来管理来自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;
}
}
现在我想将一些数据(例如导致异常的主键的列名)传递给处理程序,以便在错误页面中显示自定义消息。那么如何将这些数据传递给处理程序呢?
答案 0 :(得分:7)
要将您自己的数据传递给@ExceptionHandler
方法,您需要捕获服务层中的framework exceptions
,并通过包装其他数据来抛出您自己的custom exception
。
服务层:
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;
}
}
P.S。:我仅以ConstraintViolationException为例,但您可以为要添加其他数据的任何框架例外应用相同的概念。