I have a java service which calls an API and gets the following in return
{ "status": { "service1": { "available": true, ... }, "service2": { "available": false, ... }, ... } }
How can i use .readEntity
(or something else) to get the object for a given field; say service2
Or just convert all objects inside status
to a List<>
of objects
String output = response.readEntity(String.class);
works, but i dont know how to parse it properly to something useful as i dont want to search in the string
import javax.ws.rs.client.Client; import javax.ws.rs.core.Response; Response response = client .target(url) .request() .get(); String output = response.readEntity(String.class);
Advertisement
Answer
You can model the data with a POJO and use that to extract the data. A model of the JSON that you’ve posted might look something like
public static class ResponseData { private Map<String, Service> status; // getters and setters public static class Service { private boolean available; // getters and setters } }
The getters and setters should use JavaBean naming convention. Then make sure you have a JSON provider such as Jackson
<dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-json-jackson</artifactId> <version>${jersey2.version}</version> </dependency>
Now you can simply pass the POJO class to the readEntity()
method and it will deserialize the JSON into your POJO class.
ResponseData resData = res.readEntity(ResponseData.class); Service service2 = resData.getStatus().get("service2");
For more details on modeling your JSON, you can do a Google search for “data binding with Jackson”