[SWIFT] Essayez de transmettre des valeurs de Java Servlet à l'application iPhone à l'aide de JSON

Alors que j'étais invité à synchroniser mon entreprise et à créer une application iPhone, je me demandais comment passer des valeurs entre le serveur Web et l'application iPhone. A ce moment, il semble que JSON soit utilisé pour passer la valeur! J'ai appris ça. Ainsi, à la suite de diverses enquêtes, j'ai pu transmettre la valeur en utilisant JSON en toute sécurité, je vais donc le résumer.

J'écris avec les connaissances acquises grâce à la formation et à l'auto-apprentissage des nouveaux employés, donc s'il y a quelque chose qui ne va pas ou une meilleure façon, veuillez commenter ...

App à créer

L'écran ressemble à ceci. スクリーンショット 2020-05-12 22.47.32.png

Le flux est comme ça. ① Cliquez sur le bouton "Obtenir JSON" et passez un nombre aléatoire à JavaServlet. (2) JavaServlet répond avec JSON en fonction de la valeur numérique reçue. ③ Swift convertit l'objet JSON reçu et affiche la valeur à l'écran.

Le JSON obtenu à partir de JavaServlet est sorti dans la zone entourée par le cadre rouge. En outre, implémentez tout dans l'environnement local.

environnement

Développé avec Xcode et Eclipse.   Lors de l'utilisation de JSON, j'étais perdu à propos de GSON ou de Jackson, mais cette fois, j'ai utilisé Jackson. Pour savoir comment configurer Jackson avec Eclipce, reportez-vous à ce qui suit.  https://tech.pjin.jp/blog/2020/03/09/jackson_setup/

Code réel

Xcode Écran pour obtenir JSON

ViewController.swift



import UIKit

class ViewController: UIViewController {
    //Afficher le texte
    var textId = ""
    var textName = ""
    
    //Déclaration du tableau tapple
    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?) {   
        //URL de la requête Spécifiez un servlet qui renvoie JSON
        guard let req_url = URL(string: "http://localhost:8080/servlet_test/JsonServlet")
            else{return}
        //Générer les informations requises pour la demande
        var req = URLRequest(url: req_url)
        //0~Obtenez un nombre aléatoire de 2
        let id = Int.random(in: 0...2)
        //Créer une session pour gérer les transferts de données
        let session = URLSession(configuration: .default, delegate: nil, delegateQueue: OperationQueue.main)
        //Définissez les informations (ID) à transmettre à JavaServlet dans Body
        req.httpMethod = "POST"
        req.httpBody = "id=\(id)".data(using: .utf8)
        //Enregistrer la demande en tant que tâche
        let task = session.dataTask(with: req, completionHandler: {
            (data, response ,error) in
            //Fin de session
            session.finishTasksAndInvalidate()
            do{
                //Convertir le JSON récupéré
                let decoder = JSONDecoder()
                let json = try decoder.decode(StudentJson.self, from: data!)

                self.textId = json.id!
                self.textName = json.name!
                
                //Segue lié au bouton "Obtenir JSON"
                if segue.identifier == "goResultVC" {
                    let nextVC = segue.destination as! ResultViewVontroller
                    nextVC.jsonId = self.textId
                    nextVC.jsonName = self.textName
                }
                
            }catch{
                print(error)
                print("J'ai une erreur")
            }
        })
        //Début du téléchargement
        task.resume()
    }
    //Structure de données JSON
    struct  StudentJson: Codable {
        let id: String?
        let name: String?
    }
}

Écran de sortie JSON

ResultViewVontroller.swift


import UIKit

class ResultViewVontroller: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
    //Champ de message de sortie
    var jsonId = ""
    var jsonName = ""
    //Libellé de sortie
    @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];
		//Définir la valeur dans l'objet Java
        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 {
            //Convertir d'un objet Java en JSON
            String testJson = mapper.writeValueAsString(jsonBeanList[requestId]);

            //Sortie JSON
            response.getWriter().write(testJson);
            //Vérifiez le JSON de sortie
            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;
    }

}

Pour voir comment fonctionne JsonServlet, nous vous recommandons Talend API Tester, une extension Chrome! Talend API Tester

Résumé

Vous pouvez maintenant communiquer entre le frontal et le back-end. Ensuite, passons à AWS.

De plus, j'ai fait référence à de nombreux articles et livres Qiita pour cette implémentation.

C'était un contenu médiocre, mais merci d'avoir lu!

La notation Markdown est vraiment facile à écrire.

Recommended Posts

Essayez de transmettre des valeurs de Java Servlet à l'application iPhone à l'aide de JSON
Java: Comment envoyer des valeurs du servlet au servlet
[Java] Essayez de mettre en œuvre à l'aide de génériques
Essayez d'accéder à l'ensemble de données depuis Java en utilisant JZOS
Connexion SSH à l'aide de SSHJ à partir de l'application Java 6
Essayez d'accéder au système sur site à partir de SAP Cloud Platform --JAVA App Edition
Convertir l'énumération Java et JSON vers et depuis Jackson
Changements de Java 8 à Java 11
Somme de Java_1 à 100
De Java à Ruby !!
Générer des modèles de JSON à Swift, PHP, C #, JAVA
Essayez de créer un environnement de développement Java à l'aide de Docker
[Java] Essayez de modifier les éléments de la chaîne Json à l'aide de la bibliothèque
Essayez Spark Submit to EMR à l'aide du kit AWS SDK pour Java
Essayez d'utiliser RocksDB avec Java
Migration de Cobol vers JAVA
Essayez de gratter en utilisant Java [Note]
Essayez d'utiliser Cocoa de Ruby
Nouvelles fonctionnalités de Java7 à Java8
Connectez-vous de Java à PostgreSQL
Utilisation de Docker depuis Java Gradle
De Java inefficace à Java efficace
[Java] Essayez de résoudre le problème de Fizz Buzz en utilisant un traitement récursif
[Android] Convertissez Map en JSON à l'aide de GSON avec Kotlin et Java
Passer des paramètres de JSP avec un servlet
Essayez d'utiliser Redis avec Java (jar)
Java sera impliqué dès aujourd'hui
De Java à VB.NET - Écriture de notes de contraste
Java, interface pour partir du débutant
Essayez de créer une application client serveur
Essayez d'implémenter Yuma en Java
Essayez d'utiliser le traçage de méthode IBM Java
La route de JavaScript à Java
[Java] Conversion d'un tableau à une liste
Exemple de code utilisant Minio de Java
Essayez d'utiliser le SDK Java d'Hyperledger Iroha
[Java] Où avez-vous essayé d'utiliser java
Essayez d'émettre ou d'obtenir une carte de Jave à Trello à l'aide de l'API
Essayez d'obtenir des données de la base de données en utilisant MyBatis dans le projet Micronaut + Kotlin