it-swarm.com.de

Wie konsumieren? REST in Java

Java-Tools verwenden,

wscompile for RPC
wsimport for Document
etc..

Ich kann WSDL verwenden, um die für den Webdienst SOAP erforderlichen Stubs und Klassen zu generieren.

Ich habe jedoch keine Ahnung, wie ich dasselbe in REST tun kann. Wie kann ich die Java-Klassen erhalten, die für den Zugriff auf den REST - Webdienst erforderlich sind? Wie kann ich den Dienst trotzdem erreichen?

Kann mir jemand den Weg zeigen?

34
Mawia

Wie andere bereits gesagt haben, können Sie dies mit der untergeordneten HTTP-API tun, oder Sie können die übergeordneten JAXRS-APIs verwenden, um einen Dienst als JSON zu verwenden. Zum Beispiel:

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

Arbeitsbeispiel Try this :)

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

Stellen Sie einfach eine http-Anforderung mit der richtigen Abfragezeichenfolge oder den Anforderungshauptteil an die erforderliche URL.

Sie könnten beispielsweise Java.net.HttpURLConnection verwenden und dann über connection.getInputStream() verbrauchen und dann Ihre Objekte überdecken.

Im Frühling gibt es eine restTemplate, die das alles etwas einfacher macht. 

2
NimChimpsky

Schau dir Jersey an. Bei REST dreht sich alles um die Daten. Und ein Tutorial hier

2
Pradeep Pati

Wenn Sie auch den XML-String konvertieren müssen, der als Antwort auf den Serviceaufruf geliefert wird, können Sie ein X-Objekt wie folgt verwenden:

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

Beachten Sie, dass die XML-Struktur, die ich im Beispiel erwartet hatte, wie folgt war:

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

Aus Ihrer Frage ist nicht klar, ob Sie ein Framework verwenden. Für REST erhalten Sie eine WADL & Apache CXF-Unterstützung, die kürzlich für die WADL-first-Entwicklung von REST -Services hinzugefügt wurde. Bitte gehen Sie durch http://cxf.Apache.org/docs/index.html

1
Prabhath kesav

JAX-RS Sie können jedoch auch ein normales DOM verwenden, das mit Standard-Java geliefert wird

0
amphibient

Der folgende Code hilft, Rest-API über Java zu verbrauchen. URL - end point rest Wenn Sie keine Authentifizierung benötigen, müssen Sie die Variable authStringEnd nicht schreiben

Die Methode gibt ein JsonObject mit Ihrer Antwort zurück

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;
    }
0

Apache-HTTP-Client-APIs werden sehr häufig zum Aufrufen von HTTP-Rest-Diensten verwendet.

Hier ist ein Beispiel für die Verwendung eines HTTP-GET-Aufrufs.

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);

}
}

Verwenden Sie die folgende Maven-Abhängigkeit, wenn Sie ein Maven-Projekt verwenden.

<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

Es ist nur eine 2-Zeilen-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 Verzehrruhe

0
Vishrant

Sie können einen Restful-Webdienst in Spring mit RestTemplate.class verwenden.

Beispiel:

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())
    }

}

Referenz

0