首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >@RestControllerAdvice和@ControllerAdvice一起使用

@RestControllerAdvice和@ControllerAdvice一起使用
EN

Stack Overflow用户
提问于 2017-08-11 17:36:04
回答 2查看 11.8K关注 0票数 4

我有一个Spring MVC应用程序,它有@Controller@RestController。我在想:当我在我的@Controller中有一些异常时,它将由我的@ControllerAdvice处理,当我在我的@RestController中有一些异常时,它将由我的@RestControllerAdvice处理。但现在我认为事情不应该是这样的,因为我的@ControllerAdvice正在捕获所有东西,即使@RestController...I抛出的任何异常都不知道是否应该发生这种情况。下面是我的代码:

代码语言:javascript
运行
复制
 @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);        
  }    
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-11 17:55:14

是的,@RestControllerAdvice不是这样工作的。它只是一个自动假定为@ResponseBody的@ControllerAdvice。参见@RestControllerAdvice vs @ControllerAdvice

如果你想让一个@ControllerAdvice与一个控制器一起工作,一个与另一个控制器一起工作,那么如果你把你的控制器放在不同的包中,你应该能够做到这一点:

代码语言:javascript
运行
复制
@ControllerAdvice("my.controller1.package")

然而,@ControllerAdvice的全部要点是在彼此之间共享单独的@控制器的公共功能,因此,如果您希望它们做不同的事情,最好将这些方法放在@控制器本身中。

票数 7
EN

Stack Overflow用户

发布于 2021-07-06 18:49:33

如果您希望@RestControllerAdvice只处理从@RestController抛出的异常,则可以使用annotations属性对其进行限定:

代码语言:javascript
运行
复制
@RestControllerAdvice(annotations = RestController.class)

如果你碰巧有几个其它的@ControllerAdvice,你可能需要@Order标签。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45631766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档