J'ai une application Spring MVC qui a @Controller
s et @RestController
s. Je pensais que: Quand j'ai une exception à mon @Controller
, ça va être géré par mon @ControllerAdvice
et quand j'ai une exception à mon @RestController
, ça va être géré par mon @RestControllerAdvice
... Mais maintenant je pense que ce n'est pas comment le les choses fonctionnent, parce que mes @ControllerAdvice
attrapent tout, même que lancé par @RestController
... Je ne sais pas si cela devrait arriver. Voici mon code:@RestControllerAdvice et @ControllerAdvice ensemble
@ControllerAdvice
public class ExceptionHandlerController {
private final String DEFAULT_ERROR_VIEW = "error/default";
@ExceptionHandler(Exception.class)
public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e)
{
ModelAndView mav = new ModelAndView();
mav.addObject("exception", e);
mav.addObject("danger", e.getMessage());
mav.addObject("url", req.getRequestURL());
mav.setViewName(DEFAULT_ERROR_VIEW);
return mav;
}
}
@RestControllerAdvice
public class ExceptionHandlerRestController {
@ExceptionHandler(Exception.class)
public ResponseEntity<String> defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
return new ResponseEntity<>(" test "+e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
Merci, donc si je mets mes contrôleurs et RestControllers à certains paquets séparés, je serai capable de faire quelque chose comme ça? @ControllerAdvice ("com.controller") et @RestControllerAdvice ("com.controller.rest"), donc les exceptions au contrôleur seront transmises par ControllerAdvice et les exceptions à controller.rest seront transmises par RestControllerAdvice? –
ControllerAdvice gère toujours tout ... Peut-être package plus spécifique, je vais essayer maintenant ... –
Ouais fonctionne maintenant .... J'ai changé de paquets @RestControllerAdvice ("com.rest.controller") au lieu de @RestControllerAdvice (" com.controller.rest ") et fonctionne maintenant. –