2016-01-19 4 views
0

Я хотел бы управлять 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.

У вас есть другое решение?

ответ

0

Попробуйте добавить примечание @Order (Ordered.HIGHEST_PRECEDENCE) для обработки исключений. Это может помочь вам.

+0

Thx lot, это работает. Почему приоритет важен? Spring применяет ControllerAdvices в соответствии с порядком загрузки? –

+0

В этом случае он сначала определил, потому что они обрабатывают одно и то же исключение. Когда resolver пытается найти обработчик для исключения, он принимает сначала определение, если вы не предоставили заказ. – eg04lt3r

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