gpt4 book ai didi

Spring Controller 建议无法正确处理 CompletableFuture 异常完成

转载 作者:行者123 更新时间:2023-12-04 03:42:04 25 4
gpt4 key购买 nike

我正在使用 Spring Boot 1.5,并且我有一个异步执行的 Controller ,返回一个 CompletableFuture<User> .

@RestController
@RequestMapping("/users")
public class UserController {

@Autowired
private final UserService service;

@GetMapping("/{id}/address")
public CompletableFuture<Address> getAddress(@PathVariable String id) {
return service.findById(id).thenApply(User::getAddress);
}
}

方法 UserService.findById可以扔一个 UserNotFoundException .因此,我制定了专门的 Controller 建议。
@ControllerAdvice(assignableTypes = UserController .class)
public class UserExceptionAdvice {
@ExceptionHandler(UserNotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
@ResponseBody
public String handleUserNotFoundException(UserNotFoundException ex) {
return ex.getMessage();
}
}

问题是测试没有通过返回 HTTP 500 状态而不是 404 状态,以防未知用户请求 Controller 。

这是怎么回事?

最佳答案

对于那些仍然遇到这个问题的人:即使 Spring 正确地解开 ExecutionException,如果你有一个“异常”类型的处理程序,它被选择来处理 ExecutionException,而不是处理 ExecutionException,它也不起作用。根本原因。
解决方案:使用“异常”处理程序创建第二个 ControllerAdvice,并将 @Order(Ordered.HIGHEST_PRECEDENCE) 放在您的常规处理程序上。这样,您的常规处理程序将首先执行,而您的第二个 ControllerAdvice 将充当包罗万象的角色。

关于Spring Controller 建议无法正确处理 CompletableFuture 异常完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49676889/

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