Search code examples
javajsonrestjersey-client

Need Jersey client api way for posting a webrequest with json payload and headers


I am writing a client for one of my REST API using jersey(org.glassfish.jersey.client.*).

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

this api returns a json response. i need to provide a payload using jersey client and thats where i am stuck. FOllowing is a sample extract of payload which i need to provide (preferably as string)

Question is how can i provide a payload (XML/JSON) as string or entity to my webtarget.

I saw the answer to providing payload mentioned by calden How to send Request payload to REST API in java? but i am looking for a way to do it in jersey client.

Here is my code till now which does not work fully for post requests.

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

}

Solution

  • I got this working using following code, Salil's code works fine as well(+1 with thanks to him), thanks everyone who contributed to this problem, loving 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));
                }
    
    }