SpringBoot—统一功能处理
在Spring Boot中,可以使用@ControllerAdvice注解创建一个全局异常处理类,来处理应用程序中的各种异常情况。这个类可以集中处理各种异常,而不是在每个Controller中单独处理。
以下是一个简单的示例,展示了如何使用@ControllerAdvice注解创建全局异常处理类:
import org.springframework.http.HttpStatus;
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.ResponseStatus;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
@ControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
// 处理所有的Exception类型的异常
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public String handleAllExceptions(Exception ex) {
// 可以在这里记录日志,处理异常等
return "An error occurred: " + ex.getMessage();
}
// 处理MethodArgumentNotValidException类型的异常,通常是@Valid验证失败
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
HttpHeaders headers,
HttpStatus status,
WebRequest request) {
// 可以在这里返回自定义的错误信息
return new ResponseEntity<>("Validation failed: " + ex.getBindingResult().toString(), HttpStatus.BAD_REQUEST);
}
// 可以添加更多的异常处理方法...
}
在这个示例中,我们定义了两个异常处理方法:
handleAllExceptions
处理所有异常,返回500错误和异常信息。handleMethodArgumentNotValid
处理@Valid验证失败的异常,返回400错误和验证信息。
这样,你就可以在应用程序的任何地方抛出这些异常,而不需要在每个Controller中单独处理它们,使得代码更加集中和简洁。
评论已关闭