我正在使用CXF 3.1.4和JAX-RS创建REST服务。我创建了一个在客户端和服务器之间共享的接口:
public interface SubscriptionsService {
@POST
@Path("/subscriptions")
SubscriptionResponse create(SubscriptionRequest request);
}
public class SubscriptionResponse {
private String location;
}
使用JAXRSClientFactoryBean
创建客户端,并使用JAXRSServerFactoryBean
创建服务器。
上面定义的create()
方法应返回Location
标题,但我不知道该怎么做。
答案 0 :(得分:1)
由于您需要返回SubscriptionResponse
对象而不是Response
对象,因此可以使用HttpServletResponse
注释在JAX-RS enpoint类中注入Context
,设置201
状态代码和Location
标题:
@Context
HttpServletResponse response;
@POST
@Path("/subscriptions")
public SubscriptionResponse create(SubscriptionRequest subscriptionRequest) {
// Persist your subscripion to database
SubscriptionResponse subscriptionResponse = ...
URI createdUri = ...
// Set HTTP code to "201 Created" and set the Location header
response.setStatus(HttpServletResponse.SC_CREATED);
response.setHeader("Location", createdUri.toString());
return subscriptionResponse;
}
返回Response
对象后,您可以使用Response
API添加Location
标头,如下所示:
@POST
@Path("/subscriptions")
public Response create(SubscriptionRequest subscriptionRequest) {
// Persist your subscripion to database
URI createdUri = ...
return Response.created(createdUri).build();
}
有关详细信息,请查看Response.created(URI)
方法文档。