根据Jersey文档,
默认情况下,如果没有明确实现,JAX-RS运行时将自动支持HEAD和OPTIONS方法。对于HEAD,运行时将调用实现的GET方法(如果存在)并忽略响应实体(如果设置)。对于OPTIONS,Allow响应标头将设置为资源支持的HTTP方法集。此外,Jersey将返回描述资源的WADL文档。
因此,如果我有泽西POST
API,它是否会支持HEAD
来电?在我的情况下,它仅支持OPTIONS
调用,该调用将允许的方法返回为POST
和OPTIONS
。你如何支持HEAD
calll?
答案 0 :(得分:2)
你给出的引用回答了你问题的一半:
对于HEAD,运行时将调用已实现的GET方法(如果存在)并忽略响应实体(如果已设置)。
因此,要在你的enpoint上启用HEAD方法,你有两个选择:
POST方法不能用于提供默认HEAD实现的原因是POST方法既不安全也不幂等(如HTTP标准中所定义)。这意味着如果有人调用POST方法,他们必须假定它会对应用程序/资源状态产生影响。另一方面的GET和HEAD都是安全的和幂等的,所以他们不能改变状态。
要回答问题的第二部分 - 实施HEAD与实施其他HTTP方法不同:
import javax.ws.rs.GET;
import javax.ws.rs.HEAD;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@Path("api/ping")
public class MyResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String ping() {
return "pong!";
}
@HEAD
public Response getHeaders() {
return Response.status(200).
header("yourHeaderName", "yourHeaderValue").build();
}
}