gpt4 book ai didi

java - 在超时时更改 deferredResult HTTP 状态代码

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:44:39 25 4
gpt4 key购买 nike

我在 Spring MVC 上使用 deferredResult,但是使用这段代码,超时仍然将 HTTP 代码 503 发送回客户端。

future.onCompletion(new Runnable() {
@Override
public void run() {

if(future.isSetOrExpired()){
response.setStatus(HttpServletResponse.SC_NO_CONTENT);
}
}
});

知道还可以尝试什么吗?

最佳答案

我遇到了同样的问题。我的 Spring MVC Controller 方法最初返回 DeferredResult<Object> ,但后来我意识到我想控制 HTTP 状态代码。我在这里找到了答案:

https://www.jayway.com/2014/09/09/asynchronous-spring-service/

@RequestMapping("/async")
DeferredResult<ResponseEntity<?>> async(@RequestParam("q") String query) {

DeferredResult<ResponseEntity<?>> deferredResult = new DeferredResult<>();
ListenableFuture<RepoListDto> repositoryListDto = repoListService.search(query);

repositoryListDto.addCallback(
new ListenableFutureCallback<RepoListDto>() {
@Override
public void onSuccess(RepoListDto result) {
ResponseEntity<RepoListDto> responseEntity =
new ResponseEntity<>(result, HttpStatus.OK);
deferredResult.setResult(responseEntity);
}

@Override
public void onFailure(Throwable t) {
log.error("Failed to fetch result from remote service", t);
ResponseEntity<Void> responseEntity =
new ResponseEntity<>(HttpStatus.SERVICE_UNAVAILABLE);
deferredResult.setResult(responseEntity);
}
}
);

return deferredResult;
}

只需使用 DeferredResult<ResponseEntity>您可以在 ResponseEntity 中同时设置响应和 Http 响应代码.

关于java - 在超时时更改 deferredResult HTTP 状态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29732996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com