Code is based on Java-8 and we are using following libraries
- FasterXML Jackson Parser
- JBOSS JAX-RS libraries for calling REST API
- Apache Collection Utils
Case1: GET CALL:
URL: https://myhost.com/api/v1/search?text=someText
Method: GET
Step1: Create domain objects
package com.myclient.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) public class SearchResObj { private String id; private String name; // setter & getters }
Step2: Create a proxy interface
package com.myclient.rest.proxy import java.util.List; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.HeaderParam; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import com.myclient.domain.SearchResObj; public interface MyHostServiceProxy { String BASE_PATH = "/api/v1"; @GET @Path("/search") @Produces({MediaType.APPLICATION_JSON}) @Consumes({MediaType.APPLICATION_JSON}) List search(@QueryParam("text") String pText,@HeaderParam("token") String pToken); }
Step3: Create Service calling REST services
package com.myclient.service; import java.util.Collections; import java.util.List; import java.util.Objects; import javax.ws.rs.client.Client; import javax.ws.rs.core.UriBuilder; import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder; import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget; import org.apache.commons.collections.CollectionUtils; public List searchObjects(String text, String token) { ResteasyClient client = new ResteasyClientBuilder().build(); ResteasyWebTarget target = (ResteasyWebTarget) client .target(UriBuilder.fromPath("https://myhost.com" + MyHostServiceProxy.BASE_PATH)); MyHostServiceProxy proxy = target.proxy(MyHostServiceProxy.class); List response = proxy.search(text, token); if (Objects.isNull(response) || CollectionUtils.isEmpty(response)) { return Collections.EMPTY_LIST; } return response; }
Case2: POST CALL:
URL: https://myhost.com/api/v1/search
Method: POST
Request:
{
“text” : “someText”,
“type” : “someType”
}
Step1: Create domain objects
package com.myclient.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) public class SearchResObj { private String id; private String name; // setter & getters }
package com.myclient.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @JsonInclude(JsonInclude.Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) public class SearchReqObj { private String text; private String type; public SearchReqObj(){} public SearchReqObj(String type, String text) { this.type = type; this.text = text; } // setter & getters }
Step2: Create a proxy interface
package com.myclient.rest.proxy import java.util.List; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.HeaderParam; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import com.myclient.domain.SearchReqObj; import com.myclient.domain.SearchResObj; public interface MyHostServiceProxy { String BASE_PATH = "/api/v1"; @POST @Path("/search") @Produces({MediaType.APPLICATION_JSON}) @Consumes({MediaType.APPLICATION_JSON}) List< search(SearchReqObj requestObj,@HeaderParam("token") String pToken); }
Step3: Create Service calling REST services
package com.myclient.service; import java.util.Collections; import java.util.List; import java.util.Objects; import javax.ws.rs.client.Client; import javax.ws.rs.core.UriBuilder; import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder; import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget; import org.apache.commons.collections.CollectionUtils; import com.myclient.domain.SearchReqObj; import com.myclient.domain.SearchResObj; public List searchObjects(String type, String text, String token) { ResteasyClient client = new ResteasyClientBuilder().build(); ResteasyWebTarget target = (ResteasyWebTarget) client .target(UriBuilder.fromPath("https://myhost.com" + MyHostServiceProxy.BASE_PATH)); MyHostServiceProxy proxy = target.proxy(MyHostServiceProxy.class); List response = proxy.search(new SearchReqObj(type, text), token); if (Objects.isNull(response) || CollectionUtils.isEmpty(response.getCaseSummaries())) { return Collections.EMPTY_LIST; } return response; }