Primeros método @ExceptionHandler ambiguo asignado para MethodArgumentNotValidException mientras que el inicio de la aplicación de inicio de la primavera

Shanmugam Thangavelu:

He escrito clase del manejador de excepción personalizada para uno de mis controladores de primavera para validar si el atributo de correo de solicitud de parámetro está en el formato adecuado. Así creado una nueva clase que se extiende ResponseEntityExceptionHandlerclase y escribió con un método @ExceptionHandler.

Pero durante el inicio de la aplicación de inicio de primavera, me estoy haciendo a continuación excepción que está deteniendo el funcionamiento de mi proyecto. Podría alguien ayudarme a resolver esto?

Excepción durante el inicio del servidor:

org.springframework.beans.factory.BeanCreationException: Error al crear el frijol con el nombre 'handlerExceptionResolver' se define en la ruta de clase de recursos [org / Spring Framework / boot / AUTOCONFIGURE / web / servlet / WebMvcAutoConfiguration $ EnableWebMvcConfiguration.class]: Haba de instancias a través de método de fábrica fallado;
excepción anidada es org.springframework.beans.BeanInstantiationException: No se pudo instanciar [org.springframework.web.servlet.HandlerExceptionResolver]: Fábrica método 'handlerExceptionResolver' produjo excepción;
excepción anidada es java.lang.IllegalStateException: método @ExceptionHandler Ambiguous mapeado para [org.springframework.web.bind.MethodArgumentNotValidException clase]: {public com.TestVO com.handler.exception.TestExceptionHandler.methodArgumentNotValidException (org.springframework.web.bind .MethodArgumentNotValidException), pública final org.springframework.http.ResponseEntity org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler.handleException (java.lang.Exception, org.springframework.web.context.request.WebRequest) lanza java.lang.Exception}

Clase personalizada para controlar 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:

La ambigüedad es porque tiene el mismo método - @ExceptionHandler tanto en las clases - ResponseEntityExceptionHandler, MethodArgumentNotValidException. Usted tiene que escribir el método reemplazado de la siguiente manera de solucionar este problema -

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

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=182657&siteId=1
Recomendado
Clasificación