Here is the Format for RESTful call:
HEADERS:
Content-Type: application/json;charset=UTF-8
Authorization: Bearer Rc7JE8P7XUgSCPogjhdsVLMfITqQQrjg
REQUEST:
GET https://api.example.com/1/realTime?json={"selection":{"includeAlerts":"true","selectionType":"registered","selectionMatch":"","isTheEvent":"true","includeRuntime":"true"}}
Here is my codes:
try
{
Client client = Client.create();
WebResource webResource =
client.resource("https://api.example.com/1/realTime?json=
{"selection":{"includeAlerts":"true","selectionType":"registered","selectionMatch":"","isTheEvent":"true","includeRuntime":"true"}}");
//add header:Content-Type: application/json;charset=UTF-8
webResource.setProperty("Content-Type", "application/json;charset=UTF-8");
//add header: Authorization Bearer Rc7JE8P7XUgSCPogsdfdLMfITqQQrjg
value = "Bearer " + value;
webResource.setProperty("Authorization", value);
MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
queryParams.add("json", js);
//Get response from RESTful Server
jsonStr = webResource.get(String.class);
System.out.println("Testing:");
System.out.println(jsonStr);
}
catch (Exception e)
{
System.out.println (e.getMessage());
e.printStackTrace();
System.exit(0);
}
But it returns error
com.sun.jersey.api.client.UniformInterfaceException: GET https://api.example.com/1/realTime? returned a response status of 500
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:607)
at com.sun.jersey.api.client.WebResource.get(WebResource.java:187)
at net.yorkland.restful.GetThermostatlist.GetThermostats(GetThermostatlist.java:60)
I think I didn't add headers correctly.
Can someone help me to fix it? Please give me advice how to add headers on request.
Thank you
This snippet works fine, for sending the Bearer Token using Jersey Client.
WebTarget webTarget = client.target("endpoint");
Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON);
invocationBuilder.header("Authorization", "Bearer "+"Api Key");
Response response = invocationBuilder.get();
String responseData = response.readEntity(String.class);
System.out.println(response.getStatus());
System.out.println("responseData "+responseData);
Here is an example how I do it.
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MultivaluedHashMap;
import javax.ws.rs.core.MultivaluedMap;
import java.util.Map;
import java.lang.reflect.Type;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
Gson gson = new Gson();
Type type = new TypeToken<Map<String, String>>() {
}.getType();
MultivaluedMap<String, String> formData = new MultivaluedHashMap<String, String>();
formData.add("key1", "value1");
formData.add("key1", "value2");
WebTarget webTarget = ClientBuilder.newClient().target("https://some.server.url/");
String response = webTarget.path("subpath/subpath2").request().post(Entity.form(formData), String.class);
Map<String, String> gsonResponse = gson.fromJson(response, type);
String sBodys="Body";
HashMap<String,String> headers= new HashMap<>();
Client c = Client.create();
WebResource resource = c.resource("http://consulta/rs");
WebResource.Builder builder = resource.accept(MediaType.APPLICATION_JSON);
builder.type(MediaType.APPLICATION_JSON);
if(headers!=null){
LOGGER.debug("se setean los headers");
for (Map.Entry<String, String> entry : headers.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
LOGGER.debug("key: "+entry.getKey());
LOGGER.debug("value: "+entry.getValue());
builder.header(key, value);
}
}
ClientResponse response = builder.post(ClientResponse.class,sBodys);
ClientResponse response = webResource
.queryParams(queryParams) //
.header("Content-Type", "application/json") //
.header("id", "123") //
.get(ClientResponse.class) //
;
Try this!
Client client = ClientBuilder.newClient();
String jsonStr = client
.target("http:....")
.request(MediaType.APPLICATION_JSON)
.header("WM_SVC.NAME", "RegistryService")
.header("WM_QOS.CORRELATION_ID", "d1f0c0d2-2cf4-497b-b630-06d609d987b0")
.get(String.class);
P.S You can add any number of headers like this!
If you want to add a header to all Jersey responses, you could also use a ContainerResponseFilter
, from Jersey's filter documentation :
import java.io.IOException;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.core.Response;
@Provider
public class PoweredByResponseFilter implements ContainerResponseFilter {
@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
throws IOException {
responseContext.getHeaders().add("X-Powered-By", "Jersey :-)");
}
}
Make sure that you initialize it correctly in your project using the @Provider
annotation or through traditional ways with web.xml
.
I use the header(name, value) method and give the return to webResource var:
Client client = Client.create();
WebResource webResource = client.resource("uri");
MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
queryParams.add("json", js); //set parametes for request
appKey = "Bearer " + appKey; // appKey is unique number
//Get response from RESTful Server get(ClientResponse.class);
ClientResponse response = webResource.queryParams(queryParams)
.header("Content-Type", "application/json;charset=UTF-8")
.header("Authorization", appKey)
.get(ClientResponse.class);
String jsonStr = response.getEntity(String.class);
Source: Stackoverflow.com