这是使用Spring返回204“No Content”的正确方法吗?

问题描述 投票:2回答:3

我正在尝试使用Weblogic删除资源设置http状态NO_CONTENT,并且响应需要30秒才能完成。我误用Spring还是Weblogic中有错误?

我在使用Spring 5.0.12在Weblogic 12.2.1.0.0上尝试过这个。请求完成后,资源被删除,但客户端在此之后等待30秒(浏览器TTFB)。这似乎是一种暂停。

作为一种解决方法,我们可以返回http状态OK。

@DeleteMapping(value = "/{id}")
public ResponseEntity<Void> delete(@PathVariable("id") Long id) {
    useCase.remove(id);
    return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}

我希望客户端立即收到响应,但等待30秒。

java weblogic12c spring-web
3个回答
1
投票

比较200响应您的204响应没有Content-Length标头。尝试手动添加它以查看它是否有助于您的应用程序服务器处理空响应正文:

return ResponseEntity.noContent().header("Content-Length", "0").build();

0
投票

您还可以使用@ResponseStatus注释。

@DeleteMapping(value = "/{id}")
@ResponseStatus(HttpStatus.NO_CONTENT)
public ResponseEntity<Void> delete(@PathVariable("id") Long id) {}

0
投票

这是来自OHS的已知错误。 https://support.oracle.com/knowledge/Middleware/2162306_1.html

错误行为是:插件一直在等待内容主体,204没有主体,最终它会触发读取超时(这是30多秒)。

您需要下载补丁并申请OHS,或更改HTTP代码作为变通方法,可能是202(已接受)。

© www.soinside.com 2019 - 2024. All rights reserved.