我有一個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「),現在可以工作。 –