web-dev-qa-db-fra.com

Comment ajouter des en-têtes sur un appel RESTful à l'aide de l'API client Jersey

Voici le format pour l'appel RESTful:

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"}}

Voici mes 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);
                }

Mais ça retourne une erreur

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)

Je pense que je n'ai pas ajouté les en-têtes correctement. 

Est-ce que quelqu'un peut m'aider à le réparer? S'il vous plaît me donner des conseils sur la façon d'ajouter des en-têtes sur demande.

Je vous remercie

31
Eric

Je pense que vous cherchez une méthode d’en-tête (nom, valeur). Voir WebResource.header(String, Object)

Notez qu'il renvoie cependant un générateur, vous devez donc enregistrer la sortie dans votre variable webResource.

17
TheArchitect

J'utilise la méthode header (nom, valeur) et donne le retour à 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);
35
Eric

Essaye ça!

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 Vous pouvez ajouter autant d’en-têtes que celui-ci!

16
Sanchit Singhania

Si vous souhaitez ajouter un en-tête à toutes les réponses Jersey, vous pouvez également utiliser un ContainerResponseFilter, à partir de Documentation du filtre de Jersey :

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 :-)");
    }
}

Assurez-vous de l'initialiser correctement dans votre projet en utilisant l'annotation @Provider ou de manière traditionnelle avec web.xml.

2
Shawn S.

Cet extrait fonctionne correctement pour l'envoi du jeton de support à l'aide de 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);
0
kanaparthikiran

String sBodys = "Corps";

En-têtes HashMap = new HashMap <> ();

Client c = Client.create ();

WebResource resource = c.resource (" http: // consulta/rs ");

WebResource.Builder builder = resource.accept (MediaType.APPLICATION_JSON);

constructeur.type (MediaType.APPLICATION_JSON);

si (en-têtes! = 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);
      }
  }

Réponse ClientResponse = builder.post (ClientResponse.class, sBodys);

0
Giovanni Perea