Comment consommer REST en Java [dupliquer]


Cette question a déjà des réponses ici: Comment créez-vous un client REST pour Java? [fermé] (18 réponses) Fermé il y a 11 mois.

Utilisation des outils Java,

wscompile for RPC
wsimport for Document
etc..

Je peux utiliser WSDL pour générer le talon et les classes nécessaires pour accéder au service Web SOAP.

Mais je ne sais pas comment je peux faire la même chose dans REST. Comment puis-je obtenir les classes Java requises pour accéder au service Web REST. Quelle est la façon de frapper le service de toute façon?

Quelqu'un peut-il me montrer le chemin?

Author: Mawia, 2012-10-16

11 answers

Exemple de Travail, essayez ceci:

package restclient;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class NetClientGet {
    public static void main(String[] args) {
        try {

            URL url = new URL("http://localhost:3002/RestWebserviceDemo/rest/json/product/dynamicData?size=5");//your url i.e fetch data from .
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setRequestProperty("Accept", "application/json");
            if (conn.getResponseCode() != 200) {
                throw new RuntimeException("Failed : HTTP Error code : "
                        + conn.getResponseCode());
            }
            InputStreamReader in = new InputStreamReader(conn.getInputStream());
            BufferedReader br = new BufferedReader(in);
            String output;
            while ((output = br.readLine()) != null) {
                System.out.println(output);
            }
            conn.disconnect();

        } catch (Exception e) {
            System.out.println("Exception in NetClientGet:- " + e);
        }
    }
}
 36
Author: MAnoj Sarnaik, 2020-03-05 18:27:30

Comme d'autres l'ont dit, vous pouvez le faire en utilisant l'API HTTP de niveau inférieur, ou vous pouvez utiliser les API JAXRS de niveau supérieur pour consommer un service en tant que JSON. Par exemple:

Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://host:8080/context/rest/method");
JsonArray response = target.request(MediaType.APPLICATION_JSON).get(JsonArray.class);
 18
Author: Holly Cummins, 2015-09-26 13:43:10

C'est juste une ligne de code 2.

import org.springframework.web.client.RestTemplate;

RestTemplate restTemplate = new RestTemplate();
YourBean obj = restTemplate.getForObject("http://gturnquist-quoters.cfapps.io/api/random", YourBean.class);

Réf. Printemps.io consommer-reste

 7
Author: Vishrant, 2017-12-30 03:18:03

Le code ci-dessous aidera à consommer l'api rest via Java. URL - point final rest Si vous n'avez pas besoin d'authentification, vous n'avez pas besoin d'écrire le authStringEnd variable

La méthode renverra un JsonObject avec votre réponse

public JSONObject getAllTypes() throws JSONException, IOException {
        String url = "/api/atlas/types";
        String authString = name + ":" + password;
        String authStringEnc = new BASE64Encoder().encode(authString.getBytes());
        javax.ws.rs.client.Client client = ClientBuilder.newClient();
        WebTarget webTarget = client.target(host + url);
        Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON).header("Authorization", "Basic " + authStringEnc);

        Response response = invocationBuilder.get();
        String output = response.readEntity(String.class
        );

        System.out.println(response.toString());
        JSONObject obj = new JSONObject(output);

        return obj;
    }
 4
Author: Fernando Magalhaes, 2019-05-07 14:41:46

Si vous devez également convertir cette chaîne XML qui vient en réponse à l'appel de service, un objet x dont vous avez besoin peut le faire comme suit:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.JAXB;
import javax.xml.bind.JAXBException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.CharacterData;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

public class RestServiceClient {

// http://localhost:8080/RESTfulExample/json/product/get
public static void main(String[] args) throws ParserConfigurationException,
SAXException {

try {

URL url = new URL(
    "http://localhost:8080/CustomerDB/webresources/co.com.mazf.ciudad");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/xml");

if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : "
    + conn.getResponseCode());
}

BufferedReader br = new BufferedReader(new InputStreamReader(
    (conn.getInputStream())));

String output;

Ciudades ciudades = new Ciudades();
System.out.println("Output from Server .... \n");
while ((output = br.readLine()) != null) {
System.out.println("12132312");
System.err.println(output);

DocumentBuilder db = DocumentBuilderFactory.newInstance()
    .newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(output));

Document doc = db.parse(is);
NodeList nodes = ((org.w3c.dom.Document) doc)
    .getElementsByTagName("ciudad");

for (int i = 0; i < nodes.getLength(); i++) {
    Ciudad ciudad = new Ciudad();
    Element element = (Element) nodes.item(i);

    NodeList name = element.getElementsByTagName("idCiudad");
    Element element2 = (Element) name.item(0);

    ciudad.setIdCiudad(Integer
        .valueOf(getCharacterDataFromElement(element2)));

    NodeList title = element.getElementsByTagName("nomCiudad");
    element2 = (Element) title.item(0);

    ciudad.setNombre(getCharacterDataFromElement(element2));

    ciudades.getPartnerAccount().add(ciudad);
}
}

for (Ciudad ciudad1 : ciudades.getPartnerAccount()) {
System.out.println(ciudad1.getIdCiudad());
System.out.println(ciudad1.getNombre());
}

conn.disconnect();

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

public static String getCharacterDataFromElement(Element e) {
Node child = e.getFirstChild();
if (child instanceof CharacterData) {
CharacterData cd = (CharacterData) child;
return cd.getData();
}
return "";
}
}

Notez que la structure xml que j'attendais dans l'exemple était la suivante:

<ciudad><idCiudad>1</idCiudad><nomCiudad>BOGOTA</nomCiudad></ciudad>
 3
Author: Miguel Zapata, 2016-12-09 17:27:47

Il suffit de faire une requête http vers l'URL requise avec la chaîne de requête correcte ou le corps de la requête.

Par exemple, vous pouvez utiliser java.net.HttpURLConnection, puis consommer via connection.getInputStream(), puis covnert à vos objets.

Au printemps, il y a un restTemplate qui rend tout un peu plus facile.

 2
Author: NimChimpsky, 2012-10-16 13:51:11

Regardez Maillot. Encore une fois, REST est tout au sujet des données. Et un tutoriel ici

 2
Author: Pradeep Pati, 2012-10-16 13:51:29

JAX-RS mais vous pouvez également utiliser un DOM régulier fourni avec Java standard

 1
Author: amphibient, 2012-10-16 13:53:35

D'après votre question, il n'est pas clair si vous utilisez des frameworks.Pour REST, vous obtiendrez un support WADL & Apache CXF récemment ajouté pour le développement WADL-first des services REST.Veuillez passer par http://cxf.apache.org/docs/index.html

 1
Author: Prabhath kesav, 2012-10-17 13:12:33

Vous pouvez utiliser un service Web Restful dans Spring en utilisant RestTemplate.classe.

Exemple :

public class Application {

    public static void main(String args[]) {
        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<String> call= restTemplate.getForEntity("http://localhost:8080/SpringExample/hello",String.class);
        System.out.println(call.getBody())
    }

}

Référence

 1
Author: Joby Wilson Mathews, 2020-06-20 09:12:55

Les API client Http Apache sont très couramment utilisées pour appeler les services Rest HTTP.

Voici un exemple de consommation d'appel HTTP GET.

import java.io.IOException;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.HttpClientBuilder;

public class CallHTTPGetService {

public static void main(String[] args) throws ClientProtocolException, IOException {


    HttpClient client = HttpClientBuilder.create().build();
    HttpUriRequest httpUriRequest = new HttpGet("URL");

    HttpResponse response = client.execute(httpUriRequest);
    System.out.println(response);

}
}

Utilisez la dépendance maven suivante si vous utilisez le projet Maven.

<dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpmime -->
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpmime</artifactId>
        <version>4.5.1</version>
    </dependency>
 0
Author: Red Boy, 2018-04-04 07:43:51