springboot 全局异常处理 返回validation的异常信息
时间: 2024-09-21 11:13:37 浏览: 48
在Spring Boot中,全局异常处理通常用于捕获并统一处理应用程序中可能出现的各种异常,包括ValidationException。当使用Spring Data REST或手动验证请求时,如果发生数据校验错误,会抛出ValidationException。为了返回这个异常的信息给前端,你可以创建一个自定义的全局异常处理器。
首先,你需要创建一个实现了`HandlerExceptionResolver`接口的类,例如GlobalExceptionHandler:
```java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
@ControllerAdvice
public class GlobalExceptionHandler {
@Autowired
private MessageSource messageSource;
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public ResponseEntity<ValidationResponse> handleValidationException(MethodArgumentNotValidException ex) {
ValidationResponse response = new ValidationResponse();
response.setErrors(new ArrayList<>());
for (FieldError error : ex.getBindingResult().getAllErrors()) {
response.getErrors().add(error.getDefaultMessage());
}
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(response);
}
// 可能还需要处理其他类型的异常...
private static class ValidationResponse {
private List<String> errors;
// getters and setters...
}
}
```
在这个例子中,我们创建了一个`ValidationResponse`类,用来封装错误消息。当`MethodArgumentNotValidException`被捕获时,从异常中获取`FieldError`列表,并将默认错误消息添加到响应体中。最后,通过`ResponseEntity`返回一个HTTP 400 Bad Request状态码。
阅读全文