| 知乎专栏 |
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;
}