Java Spring如何从返回CompletableFuture对象的端点获取结果?
在下面的代码中,当端点Java Spring如何从返回CompletableFuture对象的端点获取结果?,java,spring,spring-mvc,java-8,completable-future,Java,Spring,Spring Mvc,Java 8,Completable Future,在下面的代码中,当端点getPerson被命中时,响应将是Person类型的JSON。 Spring如何将CompletableFuture转换为Person @RestController public class PersonController { @Autowired private PersonService personService; @GetMapping("/persons/{personId}" ) public CompletableF
getPerson
被命中时,响应将是Person类型的JSON。
Spring如何将CompletableFuture
转换为Person
@RestController
public class PersonController {
@Autowired
private PersonService personService;
@GetMapping("/persons/{personId}" )
public CompletableFuture<Person> getPerson(@PathVariable("personId") Integer personId) {
return CompletableFuture.supplyAsync(() -> personService.getPerson(personId));
}
}
@RestController
公共类个人控制器{
@自动连线
私人私人服务;
@GetMapping(“/persons/{personId}”)
公共CompletableFuture getPerson(@PathVariable(“personId”)整数personId){
返回CompletableFuture.SupplySync(()->personService.getPerson(personId));
}
}
当返回CompletableFuture
时,它会触发Servlet 3.0异步处理功能,该功能将在其他线程中执行CompletableFuture
,以便处理HTTP请求的服务器线程可以尽快释放以处理其他HTTP请求。(有关详细想法,请参阅一系列博客文章《从开始》)
@RestController
上注释的@ResponseBody
将使Spring通过内部注册的。它的一个实现是进一步委托Jackson将Person
对象序列化为JSON字符串,并通过将其写入HttpServletResponse
将其发送回HTTP客户端。您必须检查源代码,但它可能会执行然后应用来检索最终结果并将其发送回客户端。Person java对象是如何从CompletableFutere中提取的呢?这是通过调用join方法实现的吗?不是。它将根据Spring的延迟结果进行调整。但是从CompletableFutere
的角度来看,它只是通过使用CompletableFutere.handle()
来设置处理管道,这将填充Person
到DeferredResult
是否有任何方法可以访问spring在handle方法中使用的代码?我正在寻找spring在handle方法中处理异常的方式。它是将其包装成CompletionException
还是按原样抛出异常?我问这个问题的原因是因为我看到两个不同java版本的spring应用程序有两种不同的行为@Ken您的意思是要使用自己的代码来处理从CompletableFutere
引发的异常吗?如果是,您可以签出实现一个DeferredResultProcessingInterceptor
的handleError()
方法。我的意思是我想查看传递给handle方法的实现代码,spring使用该方法从CompletableFuture
@Ken获取Person对象