Wie POST JSON in Java-Methode mit OkHttp3 und Methode mit HttpUrlConnection-

Überblick

Hier ist eine Zusammenfassung, wie HTTP POST und HTTP GET JSON in Java ausgeführt werden. Wie man JSON → Java und Java → JSON in Java macht, ist in ** Vorheriger Artikel ** zusammengefasst

Vorbereitung

Vor der HTTP-Kommunikation müssen Java → JSON (Serialisierung) und JSON → Java (Deserialisierung) aktiviert sein. Der einfache Weg dazu ist in ** Dieser Artikel ** zusammengefasst. Ich werde ihn hier überspringen.

Betrachten Sie den Code als das folgende Format für JSON, das vom Server abgerufen oder an den Server gesendet wird.

Beispiel-JSON-Zeichenfolge: Beispiel.json


{
    "person": {
        "firstName": "John",
        "lastName": "Doe",
        "address": "NewYork",
        "pets": [
            {"type": "Dog", "name": "Jolly"},
            {"type": "Cat", "name": "Grizabella"},
            {"type": "Fish", "name": "Nimo"}
        ]
    }
}

In diesem Artikel konzentrieren wir uns auf die HTTP-Kommunikation.

So kommunizieren Sie mit HTTP in Java

Erklären Sie zwei Ansätze

--Methode mit Bibliothek (OkHttp3) Es gibt viele Bibliotheken, die mit HTTP kommunizieren können, aber in diesem Artikel konzentrieren wir uns auf OkHttp3.

  • Methode ohne Bibliothek Lassen Sie uns einen Blick darauf werfen, wie das Java-Standardpaket HttpUrlConnection ohne Verwendung einer externen Bibliothek verwendet wird.

POST und GET JSON mit OkHttp3

OkHttp3-Bibliotheksabhängigkeiten

Die Bibliotheksspezifikationsmethode von OkHttp3 lautet wie folgt

■ Die neueste Bibliothek von OkHttp3 (Maven Repository) https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp

■ OkHttp3 ** Maven ** Einstellungsbeispiel

pom.xml


<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>3.14.1</version>
</dependency>

■ Beispiel für die Einstellung von OkHttp3 ** gradle **

build.gradle


compile 'com.squareup.okhttp3:okhttp:3.14.1'

HTTP POST JSON mit OkHttp3

Unten finden Sie einen Beispiel-HTTP-Client, der eine JSON-Zeichenfolge POST und die resultierende Zeichenfolge empfängt:

OkHttpPostClient.java


/**
 *Verwenden von "OkHttp3" für die HTTP-Bibliothek und "GSON" für die GSON-Operationsbibliothek,
 *Beispiel für "POST" JSON an Server
 */
public class OkHttpPostClient {

    public static void main(String[] args) throws IOException {
        OkHttpPostClient client = new OkHttpPostClient();
        String result = client.callWebAPI();
        System.out.println(result);
    }

    private static final String WEB_API_ENDPOINT = "http://localhost:8080/api";

    public String callWebAPI() throws IOException {

        final String postJson = "{" +
                "    \"person\": {" +
                "        \"firstName\": \"John\"," +
                "        \"lastName\": \"Doe\"," +
                "        \"address\": \"NewYork\"," +
                "        \"pets\": [" +
                "            {\"type\": \"Dog\", \"name\": \"Jolly\"}," +
                "            {\"type\": \"Cat\", \"name\": \"Grizabella\"}," +
                "            {\"type\": \"Fish\", \"name\": \"Nimo\"}" +
                "        ]" +
                "    }" +
                "}";

        final Map<String, String> httpHeaders = new LinkedHashMap<String, String>();
        final String resultStr = doPost(WEB_API_ENDPOINT, "UTF-8", httpHeaders, postJson);

        return resultStr;
    }

    public String doPost(String url, String encoding, Map<String, String> headers, String jsonString) throws IOException {
        final okhttp3.MediaType mediaTypeJson = okhttp3.MediaType.parse("application/json; charset=" + encoding);

        final RequestBody requestBody = RequestBody.create(mediaTypeJson, jsonString);

        final Request request = new Request.Builder()
                .url(url)
                .headers(Headers.of(headers))
                .post(requestBody)
                .build();

        final OkHttpClient client = new OkHttpClient.Builder()
                .build();
        final Response response = client.newCall(request).execute();
        final String resultStr = response.body().string();
        return resultStr;
    }
}

HTTP GET JSON mit OkHttp3

Die folgenden Teile sind die Punkte des Codes zu ** GET **. Geben Sie im Folgenden URL und Header an und führen Sie ** GET ** aus. Verwenden Sie ** response.body (). String () **, um das Ergebnis als Text zu erhalten.

public String doGet(String url, Map<String, String> headers) throws IOException {
    final Request request = new Request.Builder()
            .url(url)
            .headers(Headers.of(headers))
            .build();
    final OkHttpClient client = new OkHttpClient.Builder().build();
    final Response response = client.newCall(request).execute();
    final String resultStr = response.body().string();
    return resultStr;
}

Unten finden Sie den vollständigen Quellcode. Dies ist ein Beispiel für den Zugriff auf http: // localhost: 8080 / api. Der serverseitige Code wird auch unten zum Experimentieren angegeben.

OkHttpGetClient.java(Quellcode)



public class OkHttpGetClient {

    public static void main(String[] args) throws IOException {
        OkHttpGetClient client = new OkHttpGetClient();
        Model result = client.callWebAPI();
        System.out.println("Firstname is " + result.person.firstName);
    }

    private static final String WEB_API_ENDPOINT = "http://localhost:8080/api";
    private final Gson mGson = new Gson();

    public Model callWebAPI() throws IOException {
        final Map<String, String> httpHeaders = new LinkedHashMap<String, String>();
        final String resultStr = doGet(WEB_API_ENDPOINT, httpHeaders);
        final Model model = mGson.fromJson(resultStr, Model.class);
        return model;
    }

    public String doGet(String url, Map<String, String> headers) throws IOException {
        final Request request = new Request.Builder()
                .url(url)
                .headers(Headers.of(headers))
                .build();
        final OkHttpClient client = new OkHttpClient.Builder().build();
        final Response response = client.newCall(request).execute();
        final String resultStr = response.body().string();
        return resultStr;
    }

}

Serverseitiger Quellcode

Zeigt den Code für einen einfachen Web-API-Server an, der Jetty als Serverseite für das Experiment verwendet

/**
 *-Wenn GET eine JSON-Zeichenfolge zurückgibt<br>
 *-Wenn JSON POSTED ist, wird der JSON analysiert und das Ergebnis zurückgegeben.<br>
 *HTTP-Server
 */
public class JsonApiServer {
    public static void main(String[] args) {
        final int PORT = 8080;
        final Class<? extends Servlet> servlet = ExampleServlet.class;
        ServletContextHandler servletHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
        servletHandler.addServlet(new ServletHolder(servlet), "/api");

        final Server jettyServer = new Server(PORT);
        jettyServer.setHandler(servletHandler);
        try {
            jettyServer.start();
            jettyServer.join();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @SuppressWarnings("serial")
    public static class ExampleServlet extends HttpServlet {

        private final Gson mGson = new Gson();

        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

            Model model = new Model();
            model.person = new Person();
            model.person.firstName = "John";
            model.person.lastName = "Machen";
            model.person.address = "New York";
            model.person.pets = new ArrayList<Pet>();
            Pet pet1 = new Pet();
            pet1.type = "Hund";
            pet1.name = "Lustig";
            model.person.pets.add(pet1);
            Pet pet2 = new Pet();
            pet2.type = "Katze";
            pet2.name = "Grizabella";
            model.person.pets.add(pet2);
            Pet pet3 = new Pet();
            pet3.type = "Fisch";
            pet3.name = "Nimo";
            model.person.pets.add(pet3);

            String json = mGson.toJson(model);

            resp.setContentType("text/html; charset=UTF-8");
            resp.setCharacterEncoding("UTF-8");
            final PrintWriter out = resp.getWriter();
            out.println(json);
            out.close();

        }

        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            final StringBuilder sb = new StringBuilder();
            String line = null;
            try {
                BufferedReader reader = req.getReader();
                while ((line = reader.readLine()) != null) {
                    sb.append(line);
                }
            } catch (Exception e) {
            }
            final String body = sb.toString();
            final Model model = mGson.fromJson(body, Model.class);
            resp.setContentType("text/html; charset=UTF-8");
            resp.setCharacterEncoding("UTF-8");
            final PrintWriter out = resp.getWriter();
            out.println("Server Generated Message");
            out.println("Firstname is " + model.person.firstName);
            out.close();
        }
    }
}

Der Satz des Quellcodes lautet wie folgt https://github.com/riversun/java-json-gson-jackson-http

POST und GET JSON mit HttpUrlConnection

Abhängige Bibliotheken

HttpUrlConnection ist ein Standard-Java-Paket, daher werden keine externen Bibliotheken benötigt **.

Bibliotheken sind häufig praktisch und anspruchsvoll, werden jedoch weiterhin verwendet, wenn Sie die Anzahl der abhängigen Bibliotheken und Gesamtmethoden aufgrund der Einführung multifunktionaler Bibliotheken, z. B. der Wand der DEX-Datei 64K in einer Android-Umgebung, nicht erhöhen möchten. Es ist Platz.

HTTP POST JSON mit HttpUrlConnection

Wie oben erwähnt, ist die Notation ** Java 1.6-konform **, sodass sie in Java-basierten Umgebungen wie Android weit verbreitet sein kann.

UrlConnHttpPostClient.java


/**
 *Verwenden Sie den Java-Standard "HttpUrlConnection" für die HTTP-Kommunikation und "GSON" für die GSON-Operationsbibliothek.
 *Beispiel für "POST" JSON vom Server
 */
public class UrlConnHttpPostClient {

    public static void main(String[] args) throws IOException {
        UrlConnHttpPostClientclient = new UrlConnHttpPostClient();
        String result = client.callWebAPI();
        System.out.println(result);
    }

    private static final String WEB_API_ENDPOINT = "http://localhost:8080/api";

    public String callWebAPI() throws IOException {

        final String postJson = "{" +
                "    \"person\": {" +
                "        \"firstName\": \"John\"," +
                "        \"lastName\": \"Doe\"," +
                "        \"address\": \"NewYork\"," +
                "        \"pets\": [" +
                "            {\"type\": \"Dog\", \"name\": \"Jolly\"}," +
                "            {\"type\": \"Cat\", \"name\": \"Grizabella\"}," +
                "            {\"type\": \"Fish\", \"name\": \"Nimo\"}" +
                "        ]" +
                "    }" +
                "}";

        final Map<String, String> httpHeaders = new LinkedHashMap<String, String>();
        final String resultStr = doPost(WEB_API_ENDPOINT, "UTF-8", httpHeaders, postJson);

        return resultStr;
    }

    private String doPost(String url, String encoding, Map<String, String> headers, String jsonString) throws IOException {

        final int TIMEOUT_MILLIS = 0;//Timeout Millisekunde: 0 ist unendlich

        final StringBuffer sb = new StringBuffer("");

        HttpURLConnection httpConn = null;
        BufferedReader br = null;
        InputStream is = null;
        InputStreamReader isr = null;

        try {
            URL urlObj = new URL(url);
            httpConn = (HttpURLConnection) urlObj.openConnection();
            httpConn.setConnectTimeout(TIMEOUT_MILLIS);//Zeit zum Verbinden
            httpConn.setReadTimeout(TIMEOUT_MILLIS);//Zeit zum Lesen von Daten
            httpConn.setRequestMethod("POST");//HTTP-Methode
            httpConn.setUseCaches(false);//Verwendung des Cache
            httpConn.setDoOutput(true);//Senden des Anforderungshauptteils zulassen(Falsch für GET,Für POST auf true setzen)
            httpConn.setDoInput(true);//Ermöglichen Sie den Empfang des Antwortkörpers

            if (headers != null) {
                for (String key : headers.keySet()) {
                    httpConn.setRequestProperty(key, headers.get(key));//HTTP-Header festlegen
                }
            }

            final OutputStream os = httpConn.getOutputStream();
            final boolean autoFlash = true;
            final PrintStream ps = new PrintStream(os, autoFlash, encoding);
            ps.print(jsonString);
            ps.close();

            final int responseCode = httpConn.getResponseCode();

            String _responseEncoding = httpConn.getContentEncoding();
            if (_responseEncoding == null) {
                _responseEncoding = "UTF-8";
            }

            if (responseCode == HttpURLConnection.HTTP_OK) {
                is = httpConn.getInputStream();
                isr = new InputStreamReader(is, _responseEncoding);
                br = new BufferedReader(isr);
                String line = null;
                while ((line = br.readLine()) != null) {
                    sb.append(line);
                }
            } else {
                //Der Status ist HTTP_OK(200)Außer
                throw new IOException("responseCode is " + responseCode);
            }

        } catch (IOException e) {
            throw e;
        } finally {
            // Java1.6 Compliant
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                }
            }
            if (isr != null) {
                try {
                    isr.close();
                } catch (IOException e) {
                }
            }
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                }
            }
            if (httpConn != null) {
                httpConn.disconnect();
            }
        }
        return sb.toString();
    }
}

HTTP GET JSON mit HttpUrlConnection

UrlConnHttpGetClient.java


package com.example.http_client.urlconnection;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.LinkedHashMap;
import java.util.Map;

import com.example.jackson.Model;
import com.google.gson.Gson;

/**
 *Verwenden Sie den Java-Standard "HttpUrlConnection" für die HTTP-Kommunikation und "GSON" für die GSON-Operationsbibliothek.
 *Beispiel für "GET" JSON vom Server
 */
public class UrlConnHttpGetClient {

    public static void main(String[] args) throws IOException {
        UrlConnHttpGetClient client = new UrlConnHttpGetClient();
        Model result = client.callWebAPI();
        System.out.println("Firstname is " + result.person.firstName);
    }

    private static final String WEB_API_ENDPOINT = "http://localhost:8080/api";
    private final Gson mGson = new Gson();

    public Model callWebAPI() throws IOException {
        final Map<String, String> httpHeaders = new LinkedHashMap<String, String>();
        final String resultStr = doGet(WEB_API_ENDPOINT, httpHeaders);
        final Model model = mGson.fromJson(resultStr, Model.class);
        return model;
    }

    public String doGet(String url, Map<String, String> headers) throws IOException {
        final int TIMEOUT_MILLIS = 0;//Timeout Millisekunde: 0 ist unendlich
        final StringBuffer sb = new StringBuffer("");

        HttpURLConnection httpConn = null;
        BufferedReader br = null;
        InputStream is = null;
        InputStreamReader isr = null;

        try {
            URL urlObj = new URL(url);
            httpConn = (HttpURLConnection) urlObj.openConnection();
            httpConn.setConnectTimeout(TIMEOUT_MILLIS);//Zeit zum Verbinden
            httpConn.setReadTimeout(TIMEOUT_MILLIS);//Zeit zum Lesen von Daten
            httpConn.setRequestMethod("GET");//HTTP-Methode
            httpConn.setUseCaches(false);//Verwendung des Cache
            httpConn.setDoOutput(false);//Senden des Anforderungshauptteils zulassen(Falsch für GET,Für POST auf true setzen)
            httpConn.setDoInput(true);//Ermöglichen Sie den Empfang des Antwortkörpers

            if (headers != null) {
                for (String key : headers.keySet()) {
                    httpConn.setRequestProperty(key, headers.get(key));//HTTP-Header festlegen
                }
            }

            final int responseCode = httpConn.getResponseCode();

            String encoding = httpConn.getContentEncoding();
            if (encoding == null) {
                encoding = "UTF-8";
            }

            if (responseCode == HttpURLConnection.HTTP_OK) {
                is = httpConn.getInputStream();
                isr = new InputStreamReader(is, encoding);
                br = new BufferedReader(isr);
                String line = null;
                while ((line = br.readLine()) != null) {
                    sb.append(line);
                }
            } else {
                //Der Status ist HTTP_OK(200)Außer
                throw new IOException("responseCode is " + responseCode);
            }

        } catch (IOException e) {
            throw e;
        } finally {
            // Java1.6 Compliant
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                }
            }
            if (isr != null) {
                try {
                    isr.close();
                } catch (IOException e) {
                }
            }
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                }
            }
            if (httpConn != null) {
                httpConn.disconnect();
            }
        }
        return sb.toString();
    }
}

Zusammenfassung

  • Ich habe auch zwei Möglichkeiten eingeführt, um eine HTTP-Kommunikation mit Java durchzuführen.

  • ** Wie benutzt man OkHttp3 **

  • Verwendung des Java-Standardpakets ** HttpUrlConnection **

  • Der gesamte Quellcode finden Sie unter hier.

Recommended Posts

Wie POST JSON in Java-Methode mit OkHttp3 und Methode mit HttpUrlConnection-
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
POST Json in Java ~ HttpURLConnection ~
[Android] Konvertieren Sie Map in JSON mit GSON mit Kotlin und Java
Wie man Parameter in der link_to-Methode hat
So montieren Sie JSON direkt in Jackson
So testen Sie eine private Methode und verspotten sie teilweise in Java
So ändern Sie die maximale und maximale Anzahl von POST-Daten in Spark
So geben Sie Excel und PDF mit Excella aus
Ausführen einer Methode und Verspotten mit JUnit
[Ruby] Verwendung der gsub-Methode und der sub-Methode
Wie man Stimme oder Musik mit Javascript spielt
Konvertieren Sie JSON und YAML in Java (mit Jackson und SnakeYAML)
Hinzufügen von Zeichen zur Anzeige bei Verwendung der link_to-Methode
Verstehen Sie, wie Sie den JSON-Decoder von Swift in 3 Minuten verwenden
So verspotten Sie einen Super-Methodenaufruf in PowerMock
POST JSON in Java
Umgang mit TSV-Dateien und CSV-Dateien in Ruby
Erstellen und Ausführen von Methoden-, Proc- und Methodenklassenobjekten
So implementieren Sie ein kreisförmiges Profilbild mit CarrierWave und R Magick in Rails
So starten Sie die Swagger-Benutzeroberfläche und den Swagger-Editor in Docker
So erhalten Sie den Namen einer Klasse / Methode, die in Java ausgeführt wird
Verwendung der Getter / Setter-Methode (in Objektorientierung)
Testen des Einschlusses von Bildern bei Verwendung von ActiveStorage und Faker
So legen Sie mit JAXB Zeichencode und Zeilenvorschubcode fest
Verwendung von JSON-Daten in der WebSocket-Kommunikation (Java, JavaScript)
So trennen Sie Wörter in Namen in Klassen, Methoden und Variablen
[Forge] So registrieren Sie Ihre eigene Entität und Ihr Entity Render in 1.13.2
[Rails] So definieren Sie Makros in Rspec und standardisieren die Verarbeitung
So legen Sie den Zeichencode und den Zeilenvorschubcode in Eclipse fest
Was ist in "Java 8 bis Java 11" passiert und wie wird eine Umgebung erstellt?
Festlegen und Beschreiben von Umgebungsvariablen mit Rails zsh
Aufrufen und Verwenden der API in Java (Spring Boot)
So stellen Sie jQuery in Rails-Apps mit Webpacker bereit
Erstellen Sie eine API zum Senden und Empfangen von Json-Daten mit Spring
So entwickeln und registrieren Sie eine Sota-App in Java
Unterschiede im Umgang mit Zeichenfolgen zwischen Java und Perl
So verbinden Sie eine Tabelle ohne DBFlute und SQL
Überwachen von Anwendungsinformationen in Echtzeit mit JConsole
So installieren Sie PHP 7.4- und SQL Server-Treiber in CentOS 7.7
So fügen Sie PKCE Code_Verifier und Code_Challenge in die JMeter-Anforderung ein
So wechseln Sie in Netty dynamisch zwischen FIN und RST
So steuern Sie Transaktionen in Spring Boot ohne Verwendung von @Transactional
[Schienen] Wie poste ich Bilder?
So erstellen Sie eine Methode
So autorisieren Sie mit graphql-ruby
Speicherort der Methodendefinition Zusammenfassung der zu überprüfenden Informationen Wenn im Projekt und in Rails / Gem definiert
[Webpacker] Zusammenfassung der Installation von Bootstrap und jQuery in Rails 6.0
Bei Verwendung von Modulen mit Gradle und IntelliJ können keine Ressourcen abgerufen werden
So legen Sie ein Profil mit annotationsbasierter Konfiguration im Spring-Framework fest und verwenden es
[jOOQ] Wie in der WHERE / AND / OR-Klausel WANN FALLEN
[Rails] So laden Sie Bilder mit Carrierwave und Fog-Aws in AWS S3 hoch
So löschen Sie große Datenmengen in Rails und Bedenken
Wie installiere ich die in Ubuntu verwendete Sprache und wie erstelle ich die Umgebung?
Speichern der im Textbereich eingegebenen Informationen in einer Variablen in der Methode
Abrufen und Hinzufügen von Daten aus dem Firebase Firestore in Ruby
[Rails] So laden Sie Bilder mit refile und refile-s3 in AWS S3 hoch
So beheben Sie den unbekannten Fehler, der bei der Verwendung von slf4j in Java aufgetreten ist