当前位置: 首页 > 知识库问答 >
问题:

在启动spring boot应用程序时获取MethodArgumentNotValidException映射的不明确的@ExceptionHandler方法

令狐昌胤
2023-03-14

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

但在spring boot应用程序启动期间,我得到了以下异常,即停止运行我的项目。有人能帮我解决这个问题吗?

服务器启动过程中的异常:

org.springframework.beans.factory.BeanCreationException:创建类路径资源[org/springframework/boot/autociguration/web/servlet/webmvcautoconfiguration$enablewebmvcconfiguration.class]中定义的名称为“Handler ExceptionResolver”的bean时出错:通过工厂方法实例化bean失败;
嵌套异常为org.springframework.web.servlet.handlerExceptionResolver:实例化ion(java.lang.exception,org.springframework.web.context.request.webrequest)抛出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;
    }
}

共有1个答案

甘祺
2023-03-14

这种歧义是因为您在类-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);
   }
 类似资料:
  • 我想使用@Valid注释和@RequestBody注释,并在我自己的方法中处理错误,这些方法用@ExceptionHandler注释注释。我希望总是返回ReponseEntity的实例。但是当我为MethodArgumentNotValidException创建ExceptionHandler时,我无法启动我的应用程序。我的控制器如下所示: 对于另一种类型的异常,一切都能正常工作,但我不能为Met

  • 太多错误了... 由:java.lang.IllegalStateException引起:发现了不明确的映射。无法将“Position WS”bean方法public java.util.list by.ipps.accounting.ws.positionws.getEmployeePost(java.lang.long)映射到{[/positionlistjson/{id}]、methods=

  • 使用spring-boot时,一切工作都很好。尽管如此,在spring-boot中已删除了注释和。我试图将代码重构为新版本,但我做不到。对于以下测试,我的应用程序在测试之前没有启动,http://localhost:8080返回404: 如何重构测试以使其在Spring-Boot1.5中工作?

  • 我的程序编译了所有内容,我没有出错,但我实际上期望tomcat应该永久在端口8080上。输出中也没有Spring。在另一个项目中,我做的一切都很好。谢谢你帮助我。 我的父母: 我的tarter.class: 我的Starter-Pom: 控制台输出: 然后什么都不会发生了。谢谢你的帮助。

  • 我有两种将实体映射到域的方法。 当我试图定义实体列表到域的映射方法时,我发现了用于映射集合元素的模糊映射方法。 有没有一种方法可以定义用于映射对象集合的方法

  • 我在stackoverflow上发现了类似的问题,并试图用这种方式(LINK)解决这个问题,但在我的项目中没有起作用。谁能给我一些建议吗? pom.xml 应用属性