Я хотел бы управлять Exception брошенного простым контроллером или RestController двух способов: 1) HTML Перенаправление 2) Json ошибкаКак иметь два ControllerAdvice в одном приложении SpringMVC
Я тестировал код ниже:
@ControllerAdvice(annotations = Controller.class)
public class ExceptionHandlerController
{
@ExceptionHandler(Exception.class)
public ModelAndView handleException(HttpServletRequest _req, Exception _ex)
{
K_LOGGER.info("test");
return new ModelAndView();
}
}
@ControllerAdvice(annotations = RestController.class)
public class ExceptionHandlerRestController
{
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleException(HttpServletRequest _req, Exception _ex)
{
return new ResponseEntity<>("test", HttpStatus.INTERNAL_SERVER_ERROR);
}
}
@RestController
public class GreetingController
{
@RequestMapping("/greetingexception")
public Greeting greetingException(@RequestParam(value = "name", defaultValue = "World") String name)
throws Exception
{
throw new Exception();
}
}
Это не работает должным образом, я всегда проходил мимо ExceptionHandlerController, но не с помощью ExceptionHandlerRestController.
Я думаю, что это потому, что @RestController наследует @Controller.
У вас есть другое решение?
Thx lot, это работает. Почему приоритет важен? Spring применяет ControllerAdvices в соответствии с порядком загрузки? –
В этом случае он сначала определил, потому что они обрабатывают одно и то же исключение. Когда resolver пытается найти обработчик для исключения, он принимает сначала определение, если вы не предоставили заказ. – eg04lt3r