web-dev-qa-db-fra.com

Comment consommer REST en Java

En utilisant des outils Java,

wscompile for RPC
wsimport for Document
etc..

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

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

Quelqu'un peut-il me montrer le chemin?

34
Mawia

Comme d'autres l'ont dit, vous pouvez le faire à l'aide de l'API HTTP de niveau inférieur ou des API de niveau supérieur JAXRS pour utiliser un service au format 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);
11
Holly Cummins

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);
        }
    }
}
6
MAnoj Sarnaik

Il suffit de faire une requête http à 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 convertir vos objets.

Au printemps, il existe une restTemplate qui facilite les choses. 

2
NimChimpsky

Regardez Jersey . Encore une fois, REST concerne uniquement les données. Et un tutoriel ici

2
Pradeep Pati

Si vous devez également convertir cette chaîne xml qui répond à 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 à laquelle je m'attendais dans l'exemple était la suivante:

<ciudad><idCiudad>1</idCiudad><nomCiudad>BOGOTA</nomCiudad></ciudad>
2
Miguel Zapata

D'après votre question, il n'est pas clair si vous utilisez des frameworks. Pour REST, vous obtiendrez un WADL & Apache CXF récemment ajouté à la prise en charge du développement par WADL du premier des services REST.Veuillez passer par http://cxf.Apache.org/docs/index.html

1
Prabhath kesav

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

0
amphibient

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

Voici un exemple d’utilisation 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
Red Boy

C'est juste 2 lignes de code.

import org.springframework.web.client.RestTemplate;

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

Ref. Spring.io consommation-reste

0
Vishrant

Vous pouvez utiliser un service Web Restful au printemps à l’aide de RestTemplate.class.

Exemple :

public class Application {

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

}

Référence

0
Joby Wilson Mathews