Resteasy. Http client

In this post we’re going to learn how to send Http Requests and receive Http Responses with RESTEasy I recommend using that approach only if you need to make few simple calls and you don’t want to spend your time on creating a “real” client. Otherwise I recommend to use the RESTeasy Proxy Framework that we’ll consider in future posts.

RESTeasy Maven dependencies

First of all we need to add required Maven dependencies for RESTeasy Client

<dependency>
  <groupId>org.jboss.resteasy</groupId>
  <artifactId>resteasy-client</artifactId>
  <version>3.1.4.Final</version>
</dependency>
<dependency>
  <groupId>org.jboss.resteasy</groupId>
  <artifactId>resteasy-jackson2-provider</artifactId>
  <version>3.1.4.Final</version>
</dependency>

RESTEasy. POST request

Let’s assume we have the RESTful web service (for example BookService from previous posts) that provides CRUD operations.

First we have to create a client

ResteasyClient httpClient = new ResteasyClientBuilder().build();

The url might look like this

String url = "http://lenar.somehost.com/api/books/";

Now we want to create a couple of Books, post them to the service and recieve responses from the service.

Book book1 = new Book("The Book 1", "John Doe");
Response response1 = httpClient.target(url).request()
      .post(Entity.entity(book1, MediaType.APPLICATION_JSON_TYPE));
System.out.println("Added Book 1:\n" + response1.readEntity(String.class));

Book book2 = new Book("The Book 2", "John Doe");
Response response2 = httpClient.target(url).request()
      .post(Entity.entity(book2, MediaType.APPLICATION_JSON_TYPE));
System.out.println("Added Book 2:\n" + response2.readEntity(String.class));

That gives the console output

Added Book 1: 
{"id":"5ad51915eda57c00041d6e68","title":"The Book 1","author":"John Doe","pages":0}
Added Book 2: 
{"id":"5ad51915eda57c00041d6e69","title":"The Book 2","author":"John Doe","pages":0}

RESTEasy. GET request

Now we want to send a GET request to get a list of books.

Response response = httpClient.target(url).request().get();
System.out.println(response.readEntity(String.class));

Both books are there

[{"id":"5ad51915eda57c00041d6e68","title":"The Book 1","author":"John Doe","pages":0},
{"id":"5ad51915eda57c00041d6e69","title":"The Book 2","author":"John Doe","pages":0}]

RESTEasy. PUT request

Let’s change the second book with a PUT request.

book2.setAuthor("Jane Doe");
response = httpClient.target(url + "5ad51915eda57c00041d6e69").request()
      .put(Entity.entity(book2, MediaType.APPLICATION_JSON_TYPE));
System.out.println(response.readEntity(String.class));
{"id":"5ad51915eda57c00041d6e69","title":"The Book 2","author":"Jane Doe","pages":0}

We can retrieve the book by its id.

response = httpClient.target(url + "5ad51915eda57c00041d6e69").request().get();
System.out.println(response.readEntity(String.class));

RESTEasy. DELETE request

We can delete one of books with a DELETE request

response = httpClient.target(url + "5ad509feeda57c00041d6e64").request().delete();
System.out.println(response.readEntity(String.class));

RESTEasy. Response code

You can easily access to the response code - response.getStatus()

Note: In this examples we get a response body as a String. You can get it as a Book object with Jackson - you need to properly annotate the class Book. Or you can just convert it from String to an object with Gson (see how)


You may also find these posts interesting: