Аннотация @ControllerAdvice не работает

#spring #spring-mvc

#spring #spring-mvc

Вопрос:

Я знаю, что этот вопрос был задан, но предложенные решения не работают для меня. При запуске создается компонент restErrorHandler и вызывается его конструктор. Но когда я создаю исключение во время выполнения в своем контроллере, он не вызывает этот обработчик ошибок. Вместо этого он вызывает обработчик по умолчанию:

 Type=DEBUG,Category=org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver,Thread="http-bio-8080"-exec-3,MDC=,Text=Resolving exception from handler [public org.springframework.http.ResponseEntity<com.egencia.auth.message.CreatePasswordPolicyResponse> com.egencia.service.controller.PasswordPolicyEndpoint.createPasswordPolicy(com.egencia.auth.message.CreatePasswordPolicyRequest,java.lang.String)]: java.lang.RuntimeException
 

ControllerAdvice .

 @ControllerAdvice
public class RestErrorHandler extends ResponseEntityExceptionHandler {
private static final Logger LOGGER = LoggerFactory
        .getLogger(RestErrorHandler.class);




private Map<Class<? extends Exception>, HttpStatus> statuses;


public RestErrorHandler() {
    Map<Class<? extends Exception>, HttpStatus> map = new HashMap<Class<? extends Exception>, HttpStatus>();
    map.put(IllegalArgumentException.class, HttpStatus.BAD_REQUEST);
    map.put(UnsupportedOperationException.class, HttpStatus.BAD_REQUEST);
    map.put(BadSqlGrammarException.class, HttpStatus.BAD_REQUEST);
    map.put(DataIntegrityViolationException.class, HttpStatus.BAD_REQUEST);
    map.put(HttpMessageConversionException.class, HttpStatus.BAD_REQUEST);
    map.put(HttpMediaTypeException.class, HttpStatus.BAD_REQUEST);
    statuses = map;
}

/**
 * Map from exception type to Http status.
 * 
 * @param statuses
 *            the statuses to set
 */
public void setStatuses(Map<Class<? extends Exception>, HttpStatus> statuses) {
    this.statuses = statuses;
}


@ExceptionHandler({RuntimeException.class})
public  ResponseEntity<Object> processError(Exception ex, WebRequest request) {
    LOGGER.debug("inside rest error handler");



}
 

}

Я также пробовал аннотацию @EnableWebMvc.

Комментарии:

1. можно ли также вставить диспетчер-сервлет ur???

2. также попробуйте поместить эту строку в ur dispatcher-servlet <context:annotation-config />

3. Что произойдет, если вы удалите WebRequest request из обработчика? подпись

Ответ №1:

попробуйте аннотировать RestErrorHandler аннотацией @Controller