处理一般的Spring MVC异常
处理请求的过程中,Spring MVC可能会抛出一些的异常。SimpleMappingExceptionResolver
可以根据需要很方便地将任何异常映射到一个默认的错误视图。但,如果客户端是通过自动检测响应的方式来分发处理异常的,那么后端就需要为响应设置对应的状态码。根据抛出异常的类型不同,可能需要设置不同的状态码来标识是客户端错误(4xx)还是服务器端错误(5xx)。
默认处理器异常解析器DefaultHandlerExceptionResolver
会将Spring MVC抛出的异常转换成对应的错误状态码。该解析器在MVC命名空间配置或MVC Java配置的方式下默认已经被注册了,另外,通过DispatcherServlet
注册也是可行的(即不使用MVC命名空间或Java编程方式进行配置的时候)。下表列出了该解析器能处理的一些异常,及他们对应的状态码。
异常
HTTP状态码
BindException
400 (无效请求)
ConversionNotSupportedException
500 (服务器内部错误)
HttpMediaTypeNotAcceptableException
406 (不接受)
HttpMediaTypeNotSupportedException
415 (不支持的媒体类型)
HttpMessageNotReadableException
400 (无效请求)
HttpMessageNotWritableException
500 (服务器内部错误)
HttpRequestMethodNotSupportedException
405 (不支持的方法)
MethodArgumentNotValidException
400 (无效请求)
MissingServletRequestParameterException
400 (无效请求)
MissingServletRequestPartException
400 (无效请求)
NoHandlerFoundException
404 (请求未找到)
NoSuchRequestHandlingMethodException
404 (请求未找到)
TypeMismatchException
400 (无效请求)
MissingPathVariableException
500 (服务器内部错误)
NoHandlerFoundException
404 (请求未找到)
以下待翻译。
The DefaultHandlerExceptionResolver
works transparently by setting the status of the response. However, it stops short of writing any error content to the body of the response while your application may need to add developer- friendly content to every error response for example when providing a REST API. You can prepare a ModelAndView
and render error content through view resolution -- i.e. by configuring a ContentNegotiatingViewResolver
, MappingJackson2JsonView
, and so on. However, you may prefer to use @ExceptionHandler
methods instead.
If you prefer to write error content via @ExceptionHandler
methods you can extend ResponseEntityExceptionHandler
instead. This is a convenient base for @ControllerAdvice
classes providing an @ExceptionHandler
method to handle standard Spring MVC exceptions and return ResponseEntity
. That allows you to customize the response and write error content with message converters. See the ResponseEntityExceptionHandler
javadocs for more details.
Last updated
Was this helpful?