Java 泽西岛';无内容';响应返回200而不是204
我正在使用Jersey(1.18)为我的Web应用程序构建RESTAPI。在我的部分代码中,我有以下代码片段Java 泽西岛';无内容';响应返回200而不是204,java,rest,jersey-1.0,Java,Rest,Jersey 1.0,我正在使用Jersey(1.18)为我的Web应用程序构建RESTAPI。在我的部分代码中,我有以下代码片段 return Response.status(Status.NO_CONTENT).entity(err_message).build(); 其中,Status是com.sun.jersey.api.client.ClientResponse.Status的一个实例 根据Jersey文档NO_CONTENT应返回204代码,http响应的头具有200代码 无内容 公共静态最终客户端响应
return Response.status(Status.NO_CONTENT).entity(err_message).build();
其中,Status
是com.sun.jersey.api.client.ClientResponse.Status的一个实例代码>
根据Jersey文档NO_CONTENT
应返回204代码,http响应的头具有200代码
无内容
公共静态最终客户端响应。状态号\u内容
204无内容,请参阅HTTP/1.1文档
我试图将上述代码更改为
return Response.noContent().entity(err_message).build();
但问题依然存在。
作为旁注,使用NOT_FOUND
代替NO_CONTENT
,按预期返回404标题
任何关于“如何返回204代码”的建议,这是一个bug还是我做错了什么
注意:不是重复的请参见
…204表示“无内容”,表示响应不包含任何内容
实体,但你在其中放了一个。很可能是泽西换了
对你来说是200,基本上和204是一样的,只是
包含一个响应实体
最后,只需几个内置函数,您就可以得到204个响应
行为:void方法和null返回值都映射到
答复。否则,只需返回Response.status(204.build()
换句话说,如果你想要“没有内容”,那么就不要在你的回复中包含内容。再深入一点,我发现了问题所在。这句话给了我们一个暗示
我引用
10.2.5 204无内容
服务器已完成请求,但不需要返回实体主体,并且可能希望返回更新的元信息。响应可能包括实体头形式的新的或更新的元信息,如果存在,则应与请求的变量相关联
如果客户端是用户代理,则不应更改导致发送请求的文档视图。此响应的主要目的是允许在不更改用户代理的活动文档视图的情况下输入操作,尽管任何新的或更新的元信息都应应用于当前用户代理的活动视图中的文档
204响应不能包括消息体,因此总是由头字段后的第一个空行终止
在我的代码中有实体(err\u message)
,这导致了问题。通过删除它,204将正确返回。我想,不知何故,球衣或“某人”对200投下了回应,因为它有内容
更新(2015年5月2日)
这个链接(今天早些时候作为答案发布,然后被删除)提供了一些关于这种情况的额外见解。根据博客文章的内容,只要HTTP响应中有任何内容,就会调用以下方法。此方法将状态代码设置回200
private void commitWrite() throws IOException {
if (!isCommitted) {
if (getStatus() == 204)
setStatus(200);
isCommitted = true;
o = responseWriter.writeStatusAndHeaders(size, ContainerResponse.this);
}
}
我们可以说,Jersey检测到,由于响应中有一些内容,因此状态代码被错误地设置为204,并将其更改为相应的200。请稍等片刻!谢谢你的快速回答。我也得出了同样的结论