Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring如何从返回CompletableFuture对象的端点获取结果?_Java_Spring_Spring Mvc_Java 8_Completable Future - Fatal编程技术网

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对象