Hier ist das Format für einen RESTful-Aufruf:
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"}}
Hier sind meine 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);
}
Aber es gibt Fehler zurück
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)
Ich glaube, ich habe die Header nicht richtig hinzugefügt.
Kann mir jemand helfen, das Problem zu beheben? Bitte geben Sie mir Hinweise, wie Sie auf Anfrage Header hinzufügen.
Vielen Dank
Ich denke, Sie suchen nach der Kopfmethode (Name, Wert). Siehe WebResource.header(String, Object)
Beachten Sie jedoch, dass ein Builder zurückgegeben wird. Daher müssen Sie die Ausgabe in Ihrer webResource-Variable speichern.
Ich verwende die Methode header (name, value) und gebe die Rückgabe an 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 = null;
response = webResource.queryParams(queryParams)
.header("Content-Type", "application/json;charset=UTF-8")
.header("Authorization", appKey)
.get(ClientResponse.class);
String jsonStr = response.getEntity(String.class);
Versuche dies!
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);
PS: Sie können beliebig viele Header hinzufügen!
Wenn Sie allen Jersey-Antworten einen Header hinzufügen möchten, können Sie auch eine ContainerResponseFilter
aus Jerseys Filterdokumentation verwenden:
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 :-)");
}
}
Stellen Sie sicher, dass Sie sie in Ihrem Projekt korrekt mit der @Provider
-Annotation oder auf herkömmliche Weise mit web.xml
initialisieren.
Dieses Snippet funktioniert gut, wenn Sie das Bearer Token mit Jersey Client senden.
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);
String sBodys = "Body";
HashMap-Header = neue HashMap <> ();
Client c = Client.create ();
WebResource-Ressource = c.resource (" http: // consulta/rs ");
WebResource.Builder-Builder = resource.accept (MediaType.APPLICATION_JSON);
builder.type (MediaType.APPLICATION_JSON);
if (Kopfzeilen! = 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);