You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中RestController返回Future而非实际响应的问题

问题原因及解决方法

你遇到的问题是因为Spring MVC默认不会自动解析Future对象包裹的实际结果,而是直接把Future实例序列化成JSON返回,所以才会得到包含cancelled、done属性的响应,而非你期望的字符串值。

解决办法有两种,按需选择:

1. 给控制器接口方法添加@Async注解

在你的RestController接口方法上也加上@Async,Spring MVC会自动处理Future的结果,等待异步任务完成后返回实际的字符串值:

@RestController
public class MyController {
    @Autowired
    private MyService myService;

    @Async
    @GetMapping("/your-api-path")
    public Future<String> getAsyncResult() {
        return myService.doInAsync();
    }
}

2. 将Service方法的返回类型改为CompletableFuture<String>

Spring对CompletableFuture的支持更完善,会自动等待异步任务完成并提取结果返回,无需额外修改控制器:

@Service
public class MyService {
    @Async
    public CompletableFuture<String> doInAsync() {
        // 替换为你的实际业务逻辑
        return CompletableFuture.completedFuture("Jordi");
    }
}

@RestController
public class MyController {
    @Autowired
    private MyService myService;

    @GetMapping("/your-api-path")
    public CompletableFuture<String> getAsyncResult() {
        return myService.doInAsync();
    }
}

注意事项

  • 确保启动类上的@EnableAsync注解已正确添加,Spring异步功能才能正常生效。
  • 第一种方法中,控制器加@Async后,请求会被Spring异步处理机制接管,不会阻塞容器线程。

内容的提问来源于stack exchange,提问作者Jordi Martí​nez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 01:03:13