ControllerAdvice 的异常处理程序在使用 Spring Boot 的 Rest API 获取请求中不起作用。如何解决?
Posted
技术标签:
【中文标题】ControllerAdvice 的异常处理程序在使用 Spring Boot 的 Rest API 获取请求中不起作用。如何解决?【英文标题】:Exception Handler of ControllerAdvice Not working in Rest API Get Request using Spring Boot. How to resolve? 【发布时间】:2021-09-20 12:20:11 【问题描述】:我有一个使用 Spring Boot 的 Rest Controller
@RestController
@RequestMapping("/api")
public class TeamController
@RequestMapping(value = "/getmember/memberId",method = RequestMethod.GET)
public ResponseEntity<TeamMember> findmember(@PathVariable("memberId") int theId)
TeamMember teamMember = teamService.findMember(theId);
if( null == teamMember)
throw new TeamMemberNotFoundException();
return new ResponseEntity<TeamMember>(teamMember,HttpStatus.OK);
我的异常类
@ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "Member not found")
public class TeamMemberNotFoundException extends RuntimeException
// constructor
使用 @ControllerAdvice 注释的我的全局异常处理程序
@ControllerAdvice
public class TeamMemberNotFoundExceptionHandler extends ResponseEntityExceptionHandler
@ExceptionHandler(TeamMemberNotFoundException.class)
public ResponseEntity<TeamMemberNotFoundErrorResponse> handleException(TeamMemberNotFoundException e)
TeamMemberNotFoundErrorResponse t = new TeamMemberNotFoundErrorResponse(HttpStatus.NOT_FOUND.value(),"Dude he doesnt exist wake up",System.currentTimeMillis());
return new ResponseEntity<TeamMemberNotFoundErrorResponse>(t, HttpStatus.NOT_FOUND);
当我直接在控制器中使用异常处理程序代码时,它似乎可以工作,但是在使用 @Controller Advice 注释的类中使用异常处理程序时根本不会调用,并且我得到默认的 500 内部服务器错误。我附上了我的项目目录结构的图片。我正在努力但无法解决这个问题
My project directory strcuture
【问题讨论】:
【参考方案1】:这可能会发生,因为如果您未指定,spring 使用约定优于配置。弹簧检查的包之一是“异常”包,请尝试将您的 ControllerAdvice 放在那里。如果不起作用,请尝试在 Application 类中指定 ControlerAdvice 的包。
【讨论】:
我制作了另一个示例项目,只是为了检查来自控制器建议的全局异常处理程序是否有效,没有使用 Postman 进行任何数据库操作,如果我从请求 URI 中得到“1”作为参数,我抛出了一个自定义异常来自控制器和位于不同包中的全局 ControllerAdvice(具有异常处理程序)(与异常或控制器不在同一个包中,但是 Application 类的子包)。这次奏效了。我猜另一个项目有一些目录或检测控制器建议的问题以上是关于ControllerAdvice 的异常处理程序在使用 Spring Boot 的 Rest API 获取请求中不起作用。如何解决?的主要内容,如果未能解决你的问题,请参考以下文章
如何优雅地处理 Spring Security 中未由 ControllerAdvice 处理的异常?
@ControllerAdvice 未捕获 Rest API 异常