SpringMVC全局异常

0x01 Servlet默认全局异常

SpringMVC默认没有配置任何异常处理,采用web.xml配置,将异常重定向到/error,然后新建一个Controller处理/error的请求即可

<error-page>
	<exception-type>java.lang.Throwableexception-type>
	<location>/errorlocation>
error-page>

但是404错误需要额外处理

<error-page>
	<error-code>404error-code>
	<location>/WEB-INF/error/404.jsplocation>
error-page>

0x02 Spring异常处理

@ResponseStatus

@ResponseStatus(code = HttpStatus.NOT_FOUND)
public class MySpringException extends RuntimeException {
}

通过改注解会将该异常作为404状态码抛出,然后我们在0x01web.xml配置的404错误处理就可以对上了

@ExceptionHandler

@ExceptionHandler(value = Throwable.class)
public String errorHandler() {
	return "hello-error";
}

该注解只能在某个Controller范围内处理异常,并且@ResponseStatus抛出的异常也会被处理

@ControllerAdvice

Spring的全局异常处理,无需在每个Controller中编写@ExceptionHandler

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(value = Throwable.class)
    public String error() {
        return "global-error";
    }

}

可以管理所有Controller层异常,但是无法管理404,并且Controller内部的ExceptionHandler优先级更高

你可能感兴趣的:(spring)