springmvc统一异常处理
时间: 2023-08-31 21:10:18 浏览: 130
在 Spring MVC 中,我们可以通过实现一个异常处理器来统一处理控制器抛出的异常。具体步骤如下:
1. 实现一个异常处理器类,并添加 @ControllerAdvice 注解。
2. 在异常处理器类中定义处理不同类型异常的方法,并使用 @ExceptionHandler 注解标记。
3. 在方法中编写异常处理逻辑,例如将异常信息记录到日志中、返回错误信息等。
4. 如果需要返回 JSON 格式的错误信息,可以使用 @ResponseBody 注解。
以下是一个简单的示例:
```java
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody
public Map<String, Object> handleException(Exception e) {
Map<String, Object> errorMap = new HashMap<>();
errorMap.put("code", "500");
errorMap.put("message", e.getMessage());
return errorMap;
}
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public Map<String, Object> handleValidationException(MethodArgumentNotValidException e) {
Map<String, Object> errorMap = new HashMap<>();
errorMap.put("code", "400");
errorMap.put("message", "参数校验失败");
List<String> errors = e.getBindingResult()
.getFieldErrors()
.stream()
.map(FieldError::getDefaultMessage)
.collect(Collectors.toList());
errorMap.put("errors", errors);
return errorMap;
}
}
```
在上述示例中,我们定义了两个处理异常的方法:handleException 和 handleValidationException。handleException 方法处理所有未被其他方法处理的异常,返回一个包含错误码和错误信息的 Map 对象;handleValidationException 方法处理参数校验失败的异常,并将校验失败的所有错误信息返回。
最后,需要注意的是,如果同时存在多个异常处理方法,Spring MVC 会按照异常类型匹配最合适的处理方法。如果没有找到合适的处理方法,则会将异常抛给 Servlet 容器进行处理。
阅读全文