我有一个Spring MVC应用程序,其中有@Controller
s和@RestController
s。 我在想:当我在我的@Controller
有一些例外,它将由我的@ControllerAdvice
处理,当我在我的@RestController
有一些例外时,它将由我的@RestControllerAdvice
处理...但现在我认为它不是如何事情的工作,因为我的@ControllerAdvice
捕捉的一切,即使是抛出@RestController
......我不知道这是否应该发生。在这里我的代码:@RestControllerAdvice和@ControllerAdvice一起
@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);
}
}
谢谢,所以如果我把我的控制器和RestControllers放在一些分离的包中,我将能够做到这样的事情? @ControllerAdvice(“com.controller”)和@RestControllerAdvice(“com.controller.rest”),所以控制器的异常将由ControllerAdvice处理,而controller.rest中的异常将由RestControllerAdvice处理? –
ControllerAdvice仍然处理一切...也许更具体的包,我现在会尝试... –
是啊现在工作....我已经改变包到@RestControllerAdvice(“com.rest.controller”),而不是@RestControllerAdvice(“ com.controller.rest“),现在可以工作。 –