繁体   English   中英

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

[英]Is this the correct way to return 204 "No Content" using Spring?

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

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

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

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

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

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

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

您还可以使用@ResponseStatus注释。

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

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

错误行为是:插件一直在等待内容正文,而 204 最终没有正文,它触发了读取超时(这是 30+ 秒)。

您需要下载补丁并应用到 OHS,或者更改 HTTP 代码作为解决方法,可能是 202(已接受)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM