모호한 @ExceptionHandler 방법은 MethodArgumentNotValidException에 대한 매핑하기 동안 봄 부팅 응용 프로그램의 시작

Shanmugam Thangavelu :

요청 PARAM의 이메일 속성이 적절한 형식으로되어 있다면 검증하는 나의 봄 컨트롤러 중 하나에 대한 사용자 정의 예외 핸들러 클래스를 작성했습니다. 그래서 확장하는 새로운 클래스 생성 된 ResponseEntityExceptionHandler클래스를하고있는 방법을 썼다 @ExceptionHandler.

그러나 봄 부팅 응용 프로그램을 시작하는 동안, 나는 내 프로젝트를 실행 중지하고 예외 아래 얻고있다. 누군가의 도움이 내게는이 문제를 해결하기 위해 수 있을까요?

서버를 시작하는 동안 예외 :

org.springframework.beans.factory.BeanCreationException : 클래스 패스 리소스에 정의 된 이름 'handlerExceptionResolver'와 콩을 만드는 오류 [조직 / 스프링 프레임 워크 / 부팅 / 자동 구성 / 웹 / 서블릿 / WebMvcAutoConfiguration $ EnableWebMvcConfiguration.class] : 콩 팩토리 메소드를 통해 인스턴스 실패;
중첩 예외 org.springframework.beans.BeanInstantiationException이다 인스턴스화 [org.springframework.web.servlet.HandlerExceptionResolver] 실패 : 예외 줬어요 공장 메소드 'handlerExceptionResolver';
중첩 예외 java.lang.IllegalStateException이다 : {공개 com.TestVO com.handler.exception.TestExceptionHandler.methodArgumentNotValidException (org.springframework.web.bind : 모호한 @ExceptionHandler 방법 [클래스 org.springframework.web.bind.MethodArgumentNotValidException]로 매핑 .MethodArgumentNotValidException), 공공 최종 org.springframework.http.ResponseEntity org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler.handleException (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;
    }
}
Chaitanya Rudrabhatla :

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);
   }

추천

출처http://43.154.161.224:23101/article/api/json?id=182652&siteId=1