RestEasy:如何使用参数和api密钥发送简单的POST请求

时间:2017-09-12 08:58:50

标签: java resteasy

我是初学者,我对Resteasy有点失落

我想发送一个帖子请求,其网址类似于:http://myurl.com/options?value=3name=picture

String myValue = "3";
String myName = "picture";
String key = "topsecret";

我不太确定会发生什么。我已经看过几个教程类(对我来说不是很清楚)和另一种与此类似的方法

final MultivaluedMap<String, Object> queryParams = new MultivaluedMapImpl<>();
queryParams.add("value", myValue);
queryParams.add("name", myPicture);
final ResteasyClient client = new ResteasyClientBuilder().build();
final ResteasyWebTarget target = client.target(url).queryParams(queryParams);;
final Builder builder = target.request();

当我写作时,我有很多警告。这是正确的方式吗? API密钥怎么样?

1 个答案:

答案 0 :(得分:5)

首先,您必须检查您要使用的API文档,了解如何将API密钥发送到服务器。 并非所有API都遵循相同的方法。

出于示例目的,我们假设必须在X-Api-Key标头中发送API密钥。它是非标准,我只是为了演示如何使用客户端API而制作它。

所以你可以拥有以下内容:

// Create a client
Client client = ClientBuilder.newClient();

// Define a target
WebTarget target = client.target("http://myurl.com/options")
                         .queryParam("value", "3")
                         .queryParam("name", "picture");

// Perform a request to the target
Response response = target.request().header("X-Api-Key", "topsecret")
                          .post(Entity.text(""));

// Process the response
// This part is up to you

// Close the response
response.close();

// Close the client
client.close();

上面的代码使用了由RESTEasy实现的JAX-RS API。您最好尽可能使用Client而不是ResteasyClient,以确保与其他实现的可移植性。

上述代码还假定您要在请求有效负载中发送空文本相应地修改它。

应该关闭包含未消耗的实体输入流

Response个实例。这通常仅适用于仅处理响应标头和状态代码的情况,忽略响应实体

超出问题范围,请记住Client个实例是重量级对象,用于管理底层客户端通信基础架构。因此,初始化以及处理Client实例可能是一项相当昂贵的操作。

documentation建议只创建小数 Client个实例,尽可能重用它们。它还声明Client实例必须正确关闭才能被处理以避免资源泄漏。