Jersey Response.seeOther()未提供HTTP 303状态代码

时间:2012-03-28 10:10:22

标签: java jersey

我有一个社交网站,我们有一个受限制的社区。

当访客用户申请会员资格时,会生成会员资格请求。我正在通过REST API执行此任务。

我在firefox中使用 RESTClient插件来发送请求。

当我发送POST resquest以向受限制社区添加self时,响应是为此生成的成员请求。因此,基础HTTP状态代码为303 See Other POST/GET

我对响应中的成员资格请求得到了相应的响应,但状态代码为200 OK(我认为是成员请求中GET的代码)。

但是,我需要同样的303.我已经尝试调试。我的发现是泽西岛Response.seeOther()没有返回303。

请帮忙。

代码段如下:

addUserToCommunity方法:

MembershipRequestModel membershipRequest = null;
membershipRequest = communityService.addUserToCommunity(communityId, userId);
if(membershipRequest != null) {
  // Add code 303 if returning membershiprequest
  return seeOther( membershipRequest, 
                   String.valueOf(membershipRequest.getId()), 
                   MembershipRequestRestHandlerImpl.class);
} else {
  return ok(null);
}

seeOther method which in turn calls Response.seeOther() :

public Response seeOther(Object model, String id, Class<?> resource){

  URI location = buildLocation(resource, id);

  return Response.seeOther(location).entity(createResponseItems(model)).build();
}

3 个答案:

答案 0 :(得分:1)

如果你想要303而不是200响应:

httpClient.getParams().setParameter(ClientPNames.HANDLE_REDIRECTS, false);

位置:标题

中的重定向网址

答案 1 :(得分:0)

303 - See Other本质上是一个重定向 - 浏览器会自动跟踪位置标题中提供的URL。你确定这不是你看到的吗?即也许您正在使用的firefox插件只是遵循重定向(幕后)并在该位置URL上返回GET方法的结果。尝试使用FireBug,它会向您显示确切的请求 - 您应该可以在那里看到重定向。

答案 2 :(得分:0)

这实际上是RESTClient的一个问题,即;像马丁所说的浏览器。

浏览器实际执行重定向但不提供303。

而是尝试使用shell中的cURL或使用puTTY来访问URI。它工作正常。

谢谢。