[SWIFT] Versuchen Sie, Werte von Java Servlet mit JSON an die iPhone-App zu übergeben

Während ich eingeladen wurde, mein Unternehmen zu synchronisieren und eine iPhone-App zu erstellen, fragte ich mich, wie ich Werte zwischen dem Webserver und der iPhone-App übertragen kann. Zu diesem Zeitpunkt scheint JSON verwendet zu werden, um den Wert zu übergeben! Ich habe das gelernt. Aufgrund verschiedener Untersuchungen konnte ich den Wert mit JSON sicher übergeben, daher werde ich ihn zusammenfassen.

Ich schreibe mit dem Wissen, das ich aus der Schulung und dem Selbstlernen neuer Mitarbeiter gewonnen habe. Wenn also etwas nicht stimmt oder ein besserer Weg, kommentieren Sie bitte ...

App zu erstellen

Der Bildschirm sieht so aus. スクリーンショット 2020-05-12 22.47.32.png

Der Fluss ist so. ① Klicken Sie auf die Schaltfläche "JSON abrufen" und übergeben Sie eine Zufallszahl an JavaServlet. (2) JavaServlet antwortet mit JSON gemäß dem empfangenen numerischen Wert. ③ Swift konvertiert das empfangene JSON-Objekt und gibt den Wert auf dem Bildschirm aus.

Der von JavaServlet erhaltene JSON wird in dem Bereich ausgegeben, der vom roten Rahmen umgeben ist. Implementieren Sie außerdem alles in der lokalen Umgebung.

Umgebung

Entwickelt mit Xcode und Eclipse.   Bei der Verwendung von JSON war ich bei GSON oder Jackson ratlos, aber diesmal habe ich Jackson verwendet. Informationen zum Einrichten von Jackson mit Eclipce finden Sie im Folgenden.  https://tech.pjin.jp/blog/2020/03/09/jackson_setup/

Tatsächlicher Code

Xcode Bildschirm, um JSON zu erhalten

ViewController.swift



import UIKit

class ViewController: UIViewController {
    //Wortlaut anzeigen
    var textId = ""
    var textName = ""
    
    //Deklaration des Tapple-Arrays
    var studentList:[(id:String , name:String)] = []
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
    @IBAction func getJson(_ sender: Any) {
        self.performSegue(withIdentifier: "goResultVC", sender: nil)
    }
    
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {   
        //Anforderungs-URL Geben Sie ein Servlet an, das JSON zurückgibt
        guard let req_url = URL(string: "http://localhost:8080/servlet_test/JsonServlet")
            else{return}
        //Generieren Sie die für die Anforderung erforderlichen Informationen
        var req = URLRequest(url: req_url)
        //0~Holen Sie sich eine Zufallszahl von 2
        let id = Int.random(in: 0...2)
        //Erstellen Sie eine Sitzung zum Verwalten von Datenübertragungen
        let session = URLSession(configuration: .default, delegate: nil, delegateQueue: OperationQueue.main)
        //Legen Sie die Informationen (ID) fest, die an JavaServlet in Body übergeben werden sollen
        req.httpMethod = "POST"
        req.httpBody = "id=\(id)".data(using: .utf8)
        //Anfrage als Aufgabe registrieren
        let task = session.dataTask(with: req, completionHandler: {
            (data, response ,error) in
            //Sitzungsende
            session.finishTasksAndInvalidate()
            do{
                //Konvertieren Sie den abgerufenen JSON
                let decoder = JSONDecoder()
                let json = try decoder.decode(StudentJson.self, from: data!)

                self.textId = json.id!
                self.textName = json.name!
                
                //Segue mit der Schaltfläche "Get JSON" verknüpft
                if segue.identifier == "goResultVC" {
                    let nextVC = segue.destination as! ResultViewVontroller
                    nextVC.jsonId = self.textId
                    nextVC.jsonName = self.textName
                }
                
            }catch{
                print(error)
                print("Ich habe einen Fehler bekommen")
            }
        })
        //Download starten
        task.resume()
    }
    //JSON-Datenstruktur
    struct  StudentJson: Codable {
        let id: String?
        let name: String?
    }
}

Bildschirm zur Ausgabe von JSON

ResultViewVontroller.swift


import UIKit

class ResultViewVontroller: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
    //Nachrichtenfeld ausgeben
    var jsonId = ""
    var jsonName = ""
    //Ausgabeetikett
    @IBOutlet weak var resultJsonId: UILabel!
    @IBOutlet weak var resultJsonName: UILabel!
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(true)
        resultJsonId.text = jsonId
        resultJsonName.text = jsonName
    }   
}

Eclipse

Java Servlet

JsonServlet.java


 package servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import bean.JsonBean;

/**
 * Servlet implementation class JsonServlet
 */
@WebServlet("/JsonServlet")
public class JsonServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public JsonServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		JsonBean jsonBeanList[] = new JsonBean[3];
		//Legen Sie den Wert im Java-Objekt fest
        JsonBean jsonBean = new JsonBean();
        jsonBean.setId("101");
        jsonBean.setName("tanaka");
        JsonBean jsonBean2 = new JsonBean();
        jsonBean2.setId("102");
        jsonBean2.setName("yamada");
        JsonBean jsonBean3 = new JsonBean();
        jsonBean3.setId("103");
        jsonBean3.setName("satou");
        jsonBeanList[0] = jsonBean;
        jsonBeanList[1] = jsonBean2;
        jsonBeanList[2] = jsonBean3;

        //
        String str = request.getParameter("id");
        int requestId = Integer.parseInt(str);

        System.out.println(requestId);

        ObjectMapper mapper = new ObjectMapper();
        try {
            //Vom Java-Objekt in JSON konvertieren
            String testJson = mapper.writeValueAsString(jsonBeanList[requestId]);

            //JSON-Ausgabe
            response.getWriter().write(testJson);
            //Überprüfen Sie die Ausgabe JSON
            System.out.println(testJson);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
	}
}

Bean

JsonBean.java


package bean;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonProperty;

public class JsonBean {

    @JsonProperty("id")
    private String id;

    @JsonProperty("name")
    private String name;

    public void setId(String id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

}

Um zu sehen, wie JsonServlet funktioniert, empfehlen wir den Talend API Tester, eine Chrome-Erweiterung! Talend API Tester

Zusammenfassung

Sie können jetzt zwischen dem Frontend und dem Backend kommunizieren. Als nächstes kommen wir zu AWS.

Außerdem habe ich für diese Implementierung auf viele Qiita-Artikel und -Bücher verwiesen.

Es war ein schlechter Inhalt, aber danke fürs Lesen!

Die Markdown-Notation ist sehr einfach zu schreiben.

Recommended Posts

Versuchen Sie, Werte von Java Servlet mit JSON an die iPhone-App zu übergeben
Java: So senden Sie Werte von Servlet zu Servlet
[Java] Versuchen Sie, mithilfe von Generika zu implementieren
Versuchen Sie, mit JZOS von Java aus auf das Dataset zuzugreifen
SSH-Verbindung mit SSHJ aus der Java6-App
Versuchen Sie, über die SAP Cloud Platform - JAVA App Edition auf das On-Premise-System zuzugreifen
Konvertieren Sie Java Enum Enumeration und JSON von und nach Jackson
Änderungen von Java 8 zu Java 11
Summe von Java_1 bis 100
Von Java zu Ruby !!
Generieren Sie Modelle von JSON zu Swift, PHP, C #, JAVA
Versuchen Sie, mit Docker eine Java-Entwicklungsumgebung zu erstellen
[Java] Versuchen Sie, die Elemente der Json-Zeichenfolge mithilfe der Bibliothek zu bearbeiten
Versuchen Sie Spark Submit to EMR mit AWS SDK für Java
Versuchen Sie es mit RocksDB mit Java
Migration von Cobol nach JAVA
Versuchen Sie, mit Java zu kratzen [Hinweis]
Versuchen Sie es mit Cocoa von Ruby
Neue Funktionen von Java7 bis Java8
Stellen Sie eine Verbindung von Java zu PostgreSQL her
Verwenden von Docker von Java Gradle
Von ineffektivem Java zu effektivem Java
[Java] Versuchen Sie, das Fizz Buzz-Problem mithilfe der rekursiven Verarbeitung zu lösen
[Android] Konvertieren Sie Map in JSON mit GSON mit Kotlin und Java
Übergeben von Parametern aus JSP mit Servlet
Versuchen Sie es mit Redis mit Java (jar)
Java soll ab heute dabei sein
Von Java zu VB.NET-Writing Kontrastmemo-
Java, Schnittstelle für Anfänger
Versuchen Sie, eine Server-Client-App zu erstellen
Versuchen Sie, Yuma in Java zu implementieren
Versuchen Sie es mit der IBM Java-Methodenverfolgung
Der Weg von JavaScript nach Java
[Java] Konvertierung von Array zu Liste
Beispielcode mit Minio aus Java
Versuchen Sie es mit dem Java SDK von Hyperledger Iroha
[Java] Wo haben Sie versucht, Java zu verwenden?
Versuchen Sie, mithilfe der API eine Karte von Jave an Trello auszustellen oder zu erhalten
Versuchen Sie, mit MyBatis im Micronaut + Kotlin-Projekt Daten aus der Datenbank abzurufen