Короче говоря.Мой сервис, выбрасывает исключения EntityNotFound.По умолчанию Spring boot не знает, что такое исключение king и как его лечить, и просто отображает «500 Internal Server Error».
У меня не было выбора, кроме как реализовать собственный механизм обработки исключений.
Есть несколько способов решения этой проблемы с загрузкой Spring.И я решил использовать @ControllerAdvice с методами @ExceptionHandler.
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(EntityNotFoundException.class)
public ResponseEntity<ErrorDetails> handleNotFound(EntityNotFoundException exception, HttpServletRequest webRequest) {
ErrorDetails errorDetails = new ErrorDetails(
new Date(),
HttpStatus.NOT_FOUND,
exception,
webRequest.getServletPath());
return new ResponseEntity<>(errorDetails, HttpStatus.NOT_FOUND);
}
}
Поэтому, когда генерируется исключение, новый обработчик ловит исключение и возвращает хороший json, содержащий сообщение, например:
{
"timestamp": "2018-06-10T08:10:32.388+0000",
"status": 404,
"error": "Not Found",
"exception": "EntityNotFoundException",
"message": "Unknown employee name: test_name",
"path": "/assignments"
}
Реализация - не так сложно.Самое сложное - это тестирование.
Прежде всего, во время тестирования пружина, похоже, не знает о новом обработчике в тестовом режиме.Как я могу сказать Spring, чтобы быть в курсе новой реализации для обработки таких ошибок?
@Test
public void shouldShow404() throws Exception {
mockMvc.perform(post("/assignments")
.contentType(APPLICATION_JSON_UTF8_VALUE)
.content(new ClassPathResource("rest/assign-desk.json").getInputStream().readAllBytes()))
.andExpect(status().isNotFound());
}
Насколько я понимаю, этот тест должен пройти, но это не так.
Любые мысли приветствуются.Благодарю вас!