在处理请求的过程中可能产生异常,如果这个异常表明这次请求不会得到正常的处理,那么应当向用户告知。Spring已经内置了一些规则,当在处理请求的过程抛出如下异常,那么就会自动的设置响应状态码。可以通过在Mapping Request的方法中直接抛出这些异常来测试是否会自动设置响应状态码,返回响应。
这些内置的映射非常有用,但是对于其他异常就无能为力了。如果要把自定义的异常也映射到响应状态码,这个非常简单只需要在自定义的异常类上添加注解:@ResponseStatus,设置这个注解的value属性。值域是枚举类HttpStatus中包含的值。
如果并不想简单的只是简单的给出一个表示请求处理失败(状态码揭示了这一点)的响应,那么可以通过在一个Controller类中定义被@ExceptionHandler注解的方法。
在一个Controller类中添加ExceptionHandler方法,ExceptionHandler方法只会在该Controller类中有效,对于其他的Controller类无效,如果要定义一个ExceptionHandler方法使得能够“应付”任何一个Controller的任何一个处理器方法抛出的对应的异常,这需要定义了一个ControllerAdvice类。ControllerAdvice类是一个被@ControllerAdvice注解的类,@ControllerAdvice已经包含@Component注解。之后在ControllerAdvice类中定义ExceptionHandler方法就可以了。