JAX RS POST API不支持HEAD请求
问题描述:
作为每泽西文档,JAX RS POST API不支持HEAD请求
默认情况下,JAX-RS运行时将自动支持方法HEAD和OPTIONS,如果没有明确实现。对于HEAD,运行时将调用已实现的GET方法(如果存在)并忽略响应实体(如果已设置)。对于OPTIONS,允许响应头将被设置为资源支持的一组HTTP方法。此外,泽西岛将返回描述资源的WADL文件。
所以,如果我有一个新泽西POST
API,将它不支持HEAD
电话吗?在我的情况下,它只支持OPTIONS
呼叫,它返回允许的方法为POST
和OPTIONS
。你如何去支持HEAD
calll?
答
你给了一半的答案你的问题的名言:
对于HEAD运行时将调用实现GET方法(如果存在的话),并忽略响应实体(如果设置)。
所以以启用enpoint HEAD方法,你有两个选择:
- 实现GET和泽西会自动提供HEAD
- 的默认实现执行HEAD明确
POST方法不能用于提供默认HEAD实现的原因是POST方法既不安全也不幂级(如HTTP标准中定义的)。这意味着如果有人调用POST方法,他们必须假定它会对应用程序/资源状态产生影响。另一方面,GET和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();
}
}