知乎专栏 |
private DeferredResult<String> deferredResult = new DeferredResult<String>(); @ResponseBody @GetMapping("/receive") public DeferredResult<String> receive() throws Exception { return deferredResult; } @ResponseBody @GetMapping("/send") public void send() throws Exception { deferredResult.setResult("Helloworld!!!"); }
private final List<DeferredResult<String>> deferredResultList = new ArrayList<DeferredResult<String>>(); @ResponseBody @GetMapping("/receive") public DeferredResult<String> receive() throws Exception { DeferredResult<String> deferredResult = new DeferredResult<>(); //先存起来,等待触发 deferredResultList.add(deferredResult); return deferredResult; } @ResponseBody @GetMapping("/send") public void send() throws Exception { // 让所有hold住的请求给与响应 deferredResultList.forEach(d -> d.setResult("say hello to all")); }
DeferredResult 与 Callback 配合使用,用来获取 Callback 返回值
@GetMapping("/tts") @Operation(summary = "音频合成") @ResponseBody public DeferredResult<ResponseJson> test(@RequestParam("text") String text, @RequestParam("filename") String filename) { DeferredResult<ResponseJson> deferredResult = new DeferredResult<ResponseJson>(); speechSynthesizerService.tts(text, new XfyunCallback() { @Override public void onCallback(String sid, String text) { String audio = aliyunService.uploadMp3FromBase64(text, filename.concat(".mp3")); ResponseJson response = new ResponseJson(true, ResponseJson.Code.SUCCESS, "", audio); deferredResult.setResult(response); } }); return deferredResult; }