示例示例代码
@RequestMapping(value = "/add", method = RequestMethod.POST)
public ModelAndView addEmployee(Model model, EmpTO empTO, BindingResult bindingResult){
try {
empService.saveOrUpdateEmployee(empTO);
} catch (Exception e) {
if (e instanceof InvException) {
model.addAttribute("error", ((InvException) e).getError());
} else {
model.addAttribute("error", PresentationUtil.handleApplicationRuntimeError(e));
}
return new ModelAndView("emp/save");
}
empTO = new EmpTO();
return new ModelAndView("emp/home");
}问题:
Thank.s
发布于 2018-01-29 07:14:57
我们使用@ExceptionHandler注释,它允许我们处理Controller方法之外的异常。不需要将错误代码放入数据库表中。
异常类:
public class InvException extends RuntimeException {
private String errorCode;
private String errorMsg;
//setter/getter
...
}和控制器
@RequestMapping(value = "/add", method = RequestMethod.POST)
public ModelAndView addEmployee(Model model, EmpTO empTO, BindingResult bindingResult){
...
} catch (InvException e) {
throw new InvException("E400", "This is Inv Exception");
} catch (Exception e) {
throw new Exception(...);
}
}
@ExceptionHandler(InvException.class)
public ModelAndView handleMyOwnException(InvException ex) {
ModelAndView model = new ModelAndView("your specific error view");
model.addObject("errCode", ex.getErrorCode());
model.addObject("errMsg", ex.getErrorMsg());
return model;
}
@ExceptionHandler(Exception.class)
public ModelAndView handleAllException(Exception ex) {
ModelAndView model = new ModelAndView("your generic error view ");
model.addObject("errMsg", "There is a exception");
return model;
}此@ExceptionHandler适用于单个控制器。通过创建一个新类并用@ControllerAdvice对其进行注释,可以将其应用于所有控制器。
@ControllerAdvice
public class GlobalExceptionController {
@ExceptionHandler(InvException.class)
public ModelAndView handleMyOwnException(InvException ex) {...}
@ExceptionHandler(Exception.class)
public ModelAndView handleAllException(Exception ex) {...}
}https://stackoverflow.com/questions/48473824
复制相似问题