java - Spring Jpa Repository 抛出的异常没有被异常处理程序@Controller Advice 捕获
问题描述
下面是我在 Spring Boot 中的 ExceptionHandler 类
@RestControllerAdvice
public class CustomResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler({InvalidRequestException.class, PropertyReferenceException.class})
public final ResponseEntity<ExceptionDetails> handleInvalidRequestException(InvalidRequestException ex, WebRequest request) {
ExceptionDetails details = new ExceptionDetails(ex.getMessage(),request.getDescription(false), new Date());
return new ResponseEntity<ExceptionDetails>(details, HttpStatus.BAD_REQUEST);
}
}
现在下面是我的服务类中的代码。
@Override
public Page<Segment> listSegment(int pageNum, int size, String sortBy, String direction, String app) {
log.info("Starting to query the segment list");
Pageable pageable = createPageRequest(size, pageNum, sortBy, direction);
Pageable pageable = new PageRequest(page, size, dir, sortBy);
Page<Segment> resultPage = segmentRepository.findByApp(app,pageable);
if(pageNum > resultPage.getTotalPages() || resultPage.getContent().isEmpty()) {
log.info("No segment present");
throw new ResourceNotFoundException("No Segment Present");
}
log.info("Total segment successfully fetched is: "+resultPage.getContent().size());
if(resultPage.hasNext())
return new Page<>(resultPage.getContent(), true);
else
return new Page<>(resultPage.getContent());
}
如果sortBy
我传递了一个无效的列名,那么这PropertyReferenceException
不会像上面提供的代码那样被我的 ExceptionHandler 捕获,我不知道为什么。
但是,如果我在我的服务层中使用 try-catch 块捕获这个异常并抛出我的自定义InvalidRequestException
,那么它就会被异常处理程序捕获。
请有人让我知道原因以及如何PropertyReferenceException
在我的 ExceptionHandler中捕获
解决方案
问题是您的这一行 - @ExceptionHandler({InvalidRequestException.class, PropertyReferenceException.class})
& 方法签名不匹配handleInvalidRequestException(InvalidRequestException ex, WebRequest request)
。
您正在注释此方法以处理两个异常,但在方法参数中仅指定一个 & 该异常是一个非常具体的异常,因此它被调用InvalidRequestException
。如果您希望两者都匹配到同一个方法,方法参数需要是两个异常的父类。
您要么需要更改由 slimane 回答的方法,要么有两个处理程序方法 - 每个异常一个。
@ExceptionHandler({InvalidRequestException.class}) handleInvalidRequestException(InvalidRequestException ex, WebRequest request)
&
@ExceptionHandler({PropertyReferenceException.class}) handlePropertyReferenceException(PropertyReferenceException ex, WebRequest request)
推荐阅读
- python - 从随机生成的列表中选择 - python
- css - 在 testcafe 中等待 css 属性值
- r - 如何将任意序列附加到数据框列
- c# - Mixed mode Debugging Python/C# using Child Process Debugging Power Tool
- python - 如何将 gRPC Python 插件与 Docker 和 Google Cloud Builds 一起使用?
- neo4j - Neo4J 中的无效备份
- c# - 如何在 Visual Studio 上使用 xamarin 表单向 ArcGIS Runtime 共享地图应用程序添加动态标记或图钉?
- dart - Flutter 中的 Openstreetmap?
- html - 网站背景图片在手机上跳跃
- ms-access - 我可以从 application.hyperlink 中的表单记录中分配文件夹名称吗?