SpringMVC:ExceptionHandler无法捕获我的自定义异常

时间:2017-01-31 07:29:01

标签: java spring spring-mvc exception-handling

在我的主控制器中,当抛出异常时,我希望它被我的错误处理控制器中的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是否有办法捕获我的异常?

1 个答案:

答案 0 :(得分:2)

尝试为错误控制器添加@ControllerAdvice注释。如果已经添加,请检查班级是否已经添加。包装包含在包装扫描中。