Spring 如何从返回 CompletableFuture 对象的端点获取结果?

MoA*_*MoA 6 java spring spring-mvc java-8 completable-future

在下面的代码中,当端点getPerson被命中时,响应将是一个 Person 类型的 JSON。Spring 如何转换CompletableFuture<Person>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));
    }
}
Run Code Online (Sandbox Code Playgroud)

Ken*_*han 9

CompletableFuture返回时,触发 Servlet 3.0 异步处理特性,该特性的执行CompletableFuture将在其他线程中执行,以便处理 HTTP 请求的服务器线程可以尽快腾出时间处理其他 HTTP 请求。(详细思路请看从这里开始的一系列博文)

上的@ResponseBody注释@RestController将导致 SpringPerson通过内部注册的HttpMessageConverter转换控制器方法的重新调整值(即)。它的实现之一是MappingJackson2HttpMessageConverter,它将进一步委托 Jackson 将Person对象序列化为JSON 字符串,并通过将其写入到 HTTP 客户端将其发送回HttpServletResponse