Я объявил глобальный обработчик исключений следующим образом:Обработка исключений в Spring MVC не достигли
@ControllerAdvice
public class GlobalDefaultExceptionHandler {
@ExceptionHandler(value = MissingMandatoryPropertyException.class)
public @ResponseBody ResponseEntity<String> missingMandatoryPropertyException(HttpServletRequest req, MissingMandatoryPropertyException exception) throws Exception {
return new ResponseEntity<String>("Missing mandatory parameter: " + exception.getMessage(), HttpStatus.BAD_REQUEST);
}
}
MissingMandatoryPropertyException просто расширить RuntimeException и это, как я бросаю исключение из моего весеннего контроллера загрузки:
if (userId == null){
throw new MissingMandatoryPropertyException("userId");
}
Итак, я ожидаю, что GlobalDefaultExceptionHandler перехватывает исключение, но почему-то это не происходит.
Я написал эту JUnit, чтобы проверить поведение исключения:
@WebAppConfiguration
@SpringApplicationConfiguration(SpringRunner.class)
@TestPropertySource(locations="classpath:/config/local/env.config")
@SuppressWarnings("unused")
public class ExceptionControllerTest {
protected static final Logger logger = LoggerFactory.getLogger(ExceptionControllerTest.class);
protected MockMvc mockPHRMvc;
@Before
public void setup() {
this.mockPHRMvc = MockMvcBuilders.standaloneSetup(new PhrController()).build();
}
@Test public void testGetPhr_missingUserID() {
try {
MvcResult result = mockPHRMvc.perform(get("/api/1.0/phr")).andExpect(status().is(HttpStatus.BAD_REQUEST.value())).andReturn();
} catch (Exception ex) {
logger.error("Exception(): ", ex);
}
}
}
Все кажется правильно настроено, но, кажется, что весна ботинки не знает, что должны использовать GlobalDefaultExceptionHandler для исключения. Такая же реализация работала с приложением Spring mvc под tomcat, но не с весенним ботинком.
Обновлено
контроллер @RestController
Любой ключ?
Включен ли 'GlobalDefaultExceptionHandler' в вашу конфигурацию для сканирования компонентов? – zeroflagL
Проблема была с jUnit ... как это было предложено @Orest, это работает сейчас (начиная с весенней загрузки, нормально работает нормально). –