1

我正在使用 jersey(org.glassfish.jersey.client.*) 为我的一个 REST API 编写客户端。

api url 是 : http://localhost:5676/searchws/search/getresults (POST)

这个 api 返回一个 json 响应。我需要使用泽西客户端提供有效载荷,这就是我卡住的地方。以下是我需要提供的有效负载的示例提取(最好是字符串)

问题是如何将有效负载(XML/JSON)作为字符串或实体提供给我的 webtarget。

我看到了 calden How to send Request payload to REST API in java? 提到的提供有效负载的答案?但我正在寻找一种在泽西客户端中做到这一点的方法。

这是我到目前为止的代码,它不能完全用于发布请求。

public class RequestGenerator 
{

    private WebTarget target;
    private ClientConfig config;
    private Client client;
    private Response response;

    public RequestGenerator(Method RequestSendingMethod) throws Exception
    {
        switch (RequestSendingMethod)
        {
            case POST :
                config = new ClientConfig();
                client = ClientBuilder.newClient(config);
                target = client.target("http://localhost:5676/searchws").path("search").path("getresults");
                String payload = "{\"query\":\"(filter:(\\\"google\\\")) AND (count_options_availbale:[1 TO *])\"}"; //This is just a sample json payload actual one is pretty large
                response = target.request(MediaType.APPLICATION_JSON_TYPE).post(Entity.json("")); // What to do here
                String jsonLine = response.readEntity(String.class);
                System.out.println(jsonLine);
}

}
4

2 回答 2

5

您将有效负载指定为 Entity.json 的参数

 String payload = "{\"query\":\"(filter:(\\\"google\\\")) AND (count_options_availbale:[1 TO *])\"}";  
 response = target.request(MediaType.APPLICATION_JSON_TYPE).post(Entity.json(payload));
于 2013-12-11T06:58:37.757 回答
4

我使用以下代码完成了这项工作,Salil 的代码也可以正常工作(感谢他+1),感谢所有为这个问题做出贡献的人,喜欢 stackoverflow:

public class RequestGenerator 
{

    private WebTarget target;
    private ClientConfig config;
    private Client client;
    private Response response;

    public RequestGenerator(Method RequestSendingMethod) throws Exception
    {
               switch (RequestSendingMethod)
            {
                case POST :             
                    String payload = "\r\n{\r\n\"query\": \"google \",\r\n\"rows\": 50,\r\n\"return_docs\": true,\r\n\"is_facet\": true\r\n}"; //this is escapped json string in single line
                    config = new ClientConfig();
                    client = ClientBuilder.newClient(config);
                    target = client.target("http://localhost:7400/searchws/search/getresults");
                    response = target.request().accept(MediaType.APPLICATION_JSON).post(Entity.entity(payload, MediaType.APPLICATION_JSON), Response.class);
                    processresponse(response); //This could be any method which processes your json response and gets you your desired data.
                    System.out.println(response.readEntity(String.class));
                    break;
                case GET :
                    config = new ClientConfig();
                    client = ClientBuilder.newClient(config);
                    target = client.target("http://localhost:7400/search-service/searchservice").path("search").path("results").path("tiger");
                    response = target.request().accept(MediaType.APPLICATION_JSON).get();
                    processresponse(response); //This could be any method which processes your json response and gets you your desired data.
                    System.out.println(response.readEntity(String.class));
            }

}
于 2013-12-11T11:23:55.250 回答