【问题标题】:Jersey REST client post with authorization泽西 REST 客户端发布授权
【发布时间】:2018-03-13 13:03:11
【问题描述】:

我在我的 Java Spring MVC Web 应用程序中使用Jersey 1.9。我正在尝试发出一个帖子请求,我必须为其设置两个标头值 - 授权和内容类型。我能够使用邮递员 REST 客户端成功发布帖子。我尝试了很多网上找到的解决方案,但我得到的响应是 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);

添加邮递员截图:

【问题讨论】:

  • 发布真实凭据不是很聪明,如果这些实际上是真实凭据。至于您的问题,您可以发布邮递员请求的图片吗?
  • @Paul Samsotha,顺便说一句,这些不是真正的凭据
  • 我会尝试使用 WebResource#queryParam 而不是将参数放在 Url 字符串中。我猜这些参数是身份验证的一部分,并且没有正确序列化。请注意,调用queryParam 会返回一个新的WebResource。
  • @Paul Samsotha - 但这真的会返回 401 - 未授权
  • 查询参数中没有api键吗?你试过了吗?

标签: jersey http-post authorization jersey-client


【解决方案1】:

经过一番研究,我终于找到了我的案例中缺少的内容,根据我从 cmets 获得的建议,我从 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);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 2018-09-06
    • 2016-03-28
    • 2015-01-12
    • 2015-03-07
    相关资源
    最近更新 更多