Нужен API-интерфейс клиента Джерси для публикации веб-запроса с полезной нагрузкой и заголовками json

Я пишу клиент для одного из своих REST API, используя jersey (org.glassfish.jersey.client. *).

URL-адрес API: http://localhost:5676/searchws/search/getresults (POST)

этот api возвращает ответ json. Мне нужно предоставить полезную нагрузку с помощью клиента jersey, и вот где я застрял. FOllowing - это образец извлечения полезной нагрузки, который мне нужно предоставить (желательно в виде строки)

Вопрос в том, как я могу предоставить полезную нагрузку (XML / JSON) в виде строки или объекта для моей веб-цели.

Я видел ответ на предоставление полезной нагрузки, упомянутый Calden Как отправить полезную нагрузку запроса в REST API в java?, но я ищу способ сделать это в клиенте jersey.

Вот мой код, который до сих пор не работает полностью для почтовых запросов.

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);
}

}

person Ashish Bajpai    schedule 10.12.2013    source источник


Ответы (2)


Вы указываете полезную нагрузку в качестве аргумента Entity.json

 String payload = "{\"query\":\"(filter:(\\\"google\\\")) AND (count_options_availbale:[1 TO *])\"}";  
 response = target.request(MediaType.APPLICATION_JSON_TYPE).post(Entity.json(payload));
person Salil    schedule 11.12.2013
comment
Спасибо Салилу, это работает. Я также получил эту работу, используя следующий код response = target.request (). Accept (MediaType.APPLICATION_JSON) .post (Entity.entity (payload, MediaType.APPLICATION_JSON), Response.class); - person Ashish Bajpai; 11.12.2013

Я получил эту работу, используя следующий код, код Салила также работает нормально (+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));
            }

}
person Ashish Bajpai    schedule 11.12.2013