gpt4 book ai didi

spring - @RestControllerAdvice 和 @ControllerAdvice 在一起

转载 作者:行者123 更新时间:2023-12-05 00:15:03 26 4
gpt4 key购买 nike

我有一个 Spring MVC 应用程序,它有 @Controller s 和 @RestController s。
我在想:当我的 @Controller 出现异常时, 由我处理 @ControllerAdvice当我的 @RestController 出现异常时, 由我处理 @RestControllerAdvice ...但现在我认为这不是事情应该如何运作,因为我的 @ControllerAdvice正在捕获所有内容,甚至是 @RestController 抛出的任何异常......我不知道这是否应该发生。这是我的代码:

 @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);
}
}

最佳答案

是的,@RestControllerAdvice 不能那样工作。它只是一个带有 @ResponseBody 自动假设的 @ControllerAdvice。见 @RestControllerAdvice vs @ControllerAdvice .

如果你想让一个 @ControllerAdvice 与一个 Controller 一起工作,一个与另一个一起工作,那么如果你把你的 Controller 放在单独的包中,你应该能够通过执行以下操作来做到这一点:

@ControllerAdvice("my.controller1.package")

但是,@ControllerAdvice 的重点是在彼此之间共享单独的@Controllers 的通用功能,因此如果您希望它们做单独的事情,您最好将方法放在@Controllers 本身中。

关于spring - @RestControllerAdvice 和 @ControllerAdvice 在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45631766/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com