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 ...
Der Bildschirm sieht so aus.
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.
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/
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
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