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)
当CompletableFuture返回时,触发 Servlet 3.0 异步处理特性,该特性的执行CompletableFuture将在其他线程中执行,以便处理 HTTP 请求的服务器线程可以尽快腾出时间处理其他 HTTP 请求。(详细思路请看从这里开始的一系列博文)
上的@ResponseBody注释@RestController将导致 SpringPerson通过内部注册的HttpMessageConverter转换控制器方法的重新调整值(即)。它的实现之一是MappingJackson2HttpMessageConverter,它将进一步委托 Jackson 将Person对象序列化为JSON 字符串,并通过将其写入到 HTTP 客户端将其发送回HttpServletResponse