2

@ExceptionHandler возвращает ответ 200 с объектом MyResponse при вызове в контроллере, но когда он вызывается из ControllerAdvice, он возвращает 404 с общим сообщением 404. Я хочу, чтобы он возвращал ответ 200 с объектом MyResponse.Контроллер исключений Spring Controller всегда Возвращающийся 404

Мой код для обработки исключений ниже, как в контроллере, так и в ControllerAdvice. Я прокомментировал это в Контроллере при тестировании ControllerAdvice. Отладка показал метод который вызывается в ControllerAdvice после закомментировать в контроллере

@ExceptionHandler(MyException.class) 
    public MyResponse handleMyException(HttpServletRequest req, MyException e) { 
    return new MyResponse(MyResponse.ERROR_CODE, e.getErrorCode(), e.getMessage(), "", null); 
} 

Ниже, как я определяю мой ControllerAdvice.

@EnableWebMvc 
@ControllerAdvice 
@ResponseStatus(value= HttpStatus.OK) 
public class ControllerAdviceExceptionHandler { 

ответ

3

Проблема заключалась в том, что мой обработчик исключения нуждался в @ResponseBody аннотацию. Мой контроллер сделал это неявно весной, но мне пришлось указать его внешне.

Sidenote: Я должен был удалить @EnableWebMvc аннотации для моих тестов JUnit работать как я инициализацию контекста в другом месте в моей тестовой конфигурации (хотя все работало отлично, когда сервер был запущен)

+0

что, если мне нужно вернуть страницу в обработчик исключений? – bangzhenXu

Смежные вопросы