Jersey REST 客户端 post 获得授权

Jersey REST client post with authorization

我在 Java Spring MVC 网络应用程序中使用 Jersey 1.9。我正在尝试发出 post 请求,我必须为其设置两个 header 值 - 授权和内容类型。我能够使用 postman REST 客户端成功制作 post。我尝试了很多网上找到的解决方案,但得到的响应是 401-Authorization failed。以下是代码是我使用的代码:

ClientConfig config = new DefaultClientConfig();
   Client client = Client.create(config);
WebResource webResource = client.resource("https://api.constantcontact.com/v2/contacts?action_by=ACTION_BY_OWNER&api_key=tntkzy2drrmbwnhdv12s36vq");
WebResource.Builder builder = webResource.type(MediaType.APPLICATION_JSON);
builder.header(HttpHeaders.AUTHORIZATION, "Bearer 28ac08bc-58d5-426e-b811-3b1d1e505a9b");
ClientResponse responseMsg = webResource
     .post(ClientResponse.class, jsonString);
  responseMsg.getEntity(String.class);

添加 postman 截图:

经过一些研究,我终于找到了我的案例中缺少的东西,根据我从评论中得到的建议,我从 URL 中删除了查询参数并将它们添加为查询参数。然后将所有查询参数添加到多值映射中,并将此多值映射用作查询参数。我的代码修改如下:

MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
queryParams.add("action_by", "ACTION_BY_OWNER");
queryParams.add("api_key", apiKey);
WebResource webResource = client.resource(url);
ClientResponse responseMsg = webResource
.queryParams(queryParams)
.header("Content-Type", "application/json;charset=UTF-8")
.header("Authorization", "Bearer "+authorisationToken.trim())
.post(ClientResponse.class, jsonString);
responseMsg.getEntity(String.class);

不知何故,当有多个查询参数时,添加 headers 不起作用,但是当将参数添加为单个多值映射时,一切正常。希望这对某人有所帮助。