gpt4 book ai didi

java - 在 Spring 启动应用程序启动时获取为MethodArgumentNotValidException映射的模糊@ExceptionHandler方法

转载 作者:行者123 更新时间:2023-12-01 10:05:19 26 4
gpt4 key购买 nike

我为我的一个 Spring Controller 编写了自定义异常处理程序类,以验证来自请求参数的电子邮件属性是否采用正确的格式。因此,创建了一个扩展ResponseEntityExceptionHandler类的新类,并使用@ExceptionHandler编写了一个方法。

但是在 Spring 启动应用程序启动期间,我遇到了异常,该异常正在停止运行我的项目。有人可以帮我解决这个问题吗?

服务器启动期间发生异常:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'handlerExceptionResolver' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Bean instantiation via factory method failed;
nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.HandlerExceptionResolver]: Factory method 'handlerExceptionResolver' threw exception;
nested exception is java.lang.IllegalStateException: Ambiguous @ExceptionHandler method mapped for [class org.springframework.web.bind.MethodArgumentNotValidException]: {public com.TestVO com.handler.exception.TestExceptionHandler.methodArgumentNotValidException(org.springframework.web.bind.MethodArgumentNotValidException), public final org.springframework.http.ResponseEntity org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler.handleException(java.lang.Exception,org.springframework.web.context.request.WebRequest) throws java.lang.Exception}



自定义类来处理 MethodArgumentNotValidException:
@ControllerAdvice
public class ExceptionHandler extends ResponseEntityExceptionHandler {

@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public ErrorVO processValidationError(MethodArgumentNotValidException ex) {
BindingResult result = ex.getBindingResult();
List<FieldError> fieldErrors = result.getFieldErrors();
FieldError fieldError = fieldErrors.get(0);
ErrorVO dto = new ErrorVO(fieldError.getDefaultMessage());
return dto;
}
}

最佳答案

模棱两可是因为在两个类(ResponseEntityExceptionHandler,MethodArgumentNotValidException)中都有相同的方法-@ExceptionHandler。您需要编写如下的重写方法来解决此问题-

   @Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
HttpHeaders headers, HttpStatus status, WebRequest request) {
String errorMessage = ex.getBindingResult().getFieldErrors().get(0).getDefaultMessage();
List<String> validationList = ex.getBindingResult().getFieldErrors().stream().map(fieldError->fieldError.getDefaultMessage()).collect(Collectors.toList());
LOGGER.info("Validation error list : "+validationList);
ApiErrorVO apiErrorVO = new ApiErrorVO(errorMessage);
apiErrorVO.setErrorList(validationList);
return new ResponseEntity<>(apiErrorVO, status);
}

关于java - 在 Spring 启动应用程序启动时获取为MethodArgumentNotValidException映射的模糊@ExceptionHandler方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51991992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com