在我的主控制器中,当抛出异常时,我希望它被我的错误处理控制器中的ExceptionHandler
捕获,但是从来没有发生。相反,我得到Error 500
。我怀疑问题出在我的主控制器的@ResponseBody
注释中。知道如何实现通缉行为吗?
主控制器
@RequestMapping(value = "/person/{person}", method = RequestMethod.GET)
public @ResponseBody Person execute(@PathVariable(value = "person") String person) {
if(person.isValid(person)) {
return person;
} else {
throw new ResourceNotFoundException("Invalid person format.");
}
}
异常
@ResponseStatus(value = HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {
public ResourceNotFoundException() {
}
public ResourceNotFoundException(String message) {
super(message);
}
public ResourceNotFoundException(String message, Throwable throwable) {
super(message, throwable);
}
public ResourceNotFoundException(Throwable throwable) {
super(throwable);
}
}
错误控制器
private static final String ERROR_PAGE = "errors/error.jsp";
@ResponseStatus(value = HttpStatus.NOT_FOUND)
@ExceptionHandler(ResourceNotFoundException.class)
public ModelAndView invalidApiCall(){
return generateView(ERROR_404);
}
private ModelAndView generateView(String errorCode) {
return new ModelAndView(ERROR_PAGE);
}
永远不会生成我的错误视图(@ExceptionHandler永远不会捕获异常)。相反,我收到错误500. ExceptionHandler是否有办法捕获我的异常?
答案 0 :(得分:2)
尝试为错误控制器添加@ControllerAdvice
注释。如果已经添加,请检查班级是否已经添加。包装包含在包装扫描中。