Heim > Java > javaLernprogramm > Wie ruft Java die Schnittstelle auf, um JSON-Daten abzurufen und nach dem Parsen in der Datenbank zu speichern?

Wie ruft Java die Schnittstelle auf, um JSON-Daten abzurufen und nach dem Parsen in der Datenbank zu speichern?

WBOY
Freigeben: 2023-05-14 10:58:05
nach vorne
1809 Leute haben es durchsucht

    Java ruft die Schnittstelle auf, um JSON-Daten abzurufen und in der Datenbank zu speichern

    1. Konfigurieren Sie Ihre eigene definierte Schnittstellen-URL in der YML-Datei

        //自己定义的JSON接口URL
        blacklist_data_url: 接口URL
    Nach dem Login kopieren

    . Fügen Sie die Anforderungsmethode und den Pfad zum Controller hinzu 3. Fügen Sie es zur Service-Methode

        /**
         * @Title: 查询
         * @Description: 查询车辆的记录
         * @Author: 半度纳
         * @Date: 2022/9/27 17:33
         */
        @GetMapping("/Blacklist")
        public void selectBlacklist(){
            boolean a = imBuBlacklistService.selectBlacklist();//调用业务层方法
        }
    Nach dem Login kopieren

    hinzu. Implementieren Sie die Methode

        /**
         * @Title: 查询
         * @Description: 查询车辆的记录
         * @Author: 半度纳
         * @Date: 2022/9/27 17:33
         * @return
         */
        public boolean selectBlacklist();//返回值类型没要求
    Nach dem Login kopieren

    in ServiceImpl, um die Schnittstelle aufzurufen, den JSON-String zu analysieren und in der Datenbank zu speichern.

    Holen Sie sich den JSON-String über die API-Schnittstelle Schnittstellendaten über Get (httpGet)-Anforderung, verwenden Sie die HttpClient-Grundanalyse. Sechs Schritte:

    Erstellen Sie eine HttpClient-Instanz.

    • Erstellen Sie eine Instanz einer bestimmten Verbindungsmethode.

    • Rufen Sie die Ausführungsmethode der HttpClient-Instanz auf, um sie auszuführen die Anforderungsmethode

    • Lesen Sie die Antwort

    • Geben Sie die Verbindung frei, unabhängig davon, ob die Ausführungsmethode erfolgreich ist

    •     import cn.hutool.json.JSONArray;
          import cn.hutool.json.JSONObject;
          import com.alibaba.fastjson2.JSON;
       
       
          @Value("${blacklist_data_url}")
          public String blacklist_data_url;//接口URL
       
       
          /**
           * @Title: 查询
           * @Description: 查询车辆的记录
           * @Author: 半度纳
           * @Date: 2022/9/27 17:33
           * @return
           */
          @Override
          public boolean selectBlacklist() {
              //获取的JSON接口数据(在输出测试时sendGet方法可能会自动输出,具体需看底层代码)
              String list= HttpUtils.sendGet(blacklist_data_url);
              JSONObject j = JSON.parseObject(list);//将获取的JSON数据存储到变量中
              if(j.getBoolean("success")){//获取success判断是否为空
                  JSONObject jsonData = j.getJSONObject("body");//解析JSON的body
                  JSONArray jsonArray = jsonData.getJSONArray("data");//解析JSON的data数据
                  JSONObject row = null;//定义一个空变量
                  ImBuBlacklist buBlacklist=new ImBuBlacklist();//new一个实体类用来接收数据
                  for (int y = 0; y < jsonArray.size(); ++y) {//循环将JSON数据存储到数据库中
                      buBlacklist = new ImBuBlacklist();//new一个实体类存储数据
                      row = jsonArray.getJSONObject(y);//获取数组中的数据
                         //设置获取到的JSON号牌号码到实体类的相同字段中
                      buBlacklist.setPlateNumber(row.getString("mechanicalNumber"));
                      //设置获取到的JSON车辆类型到实体类的相同字段中
                      buBlacklist.setVehicleType(row.getString("machType"));
                      //设置获取到的JSON检查日期到实体类的相同字段中
                         buBlacklist.setExamineDate(row.getDate("createDate"));
                      //设置获取到的JSON检查地点到实体类的相同字段中
                      buBlacklist.setExamineAddress(row.getString("machineAddr"));
                      //设置获取到的JSON违规行为到实体类的相同字段中
                      buBlacklist.setIllegalBehavior(row.getString("joinTheBlacklistReason"));
                      //设置获取到的JSON黑名单类型到实体类的相同字段中
                      buBlacklist.setBlacklistType(row.getInteger("violations"));
                      //通过mapper的新增方法,把实体类中的JSON数据存到数据库中
                      imBuBlacklistMapper.insertImBuBlacklist(buBlacklist);
                  }
                  return true;//自己定义的返回值(没有用)
              }else{
                  return false;
              }
          }
      Nach dem Login kopieren

      Wir können den Status der Antwort beurteilen und überprüfen, ob die Daten erhalten wurden. Die Statuswerte der Seitenanforderung sind: 200 Anforderung erfolgreich, 303 Umleitung, 400 Anforderungsfehler, 401 keine Autorisierung, 403 Zugriff verboten, 404 Datei nicht gefunden, 500 Serverfehler.

    (HttpStatus.OK = 200;HttpStatus.BAD_REQUEST = 400; HttpStatus.FORBIDDEN = 403;HttpStatus.NOT_FOUND = 404;HttpStatus.SERVICE_UN AVAILABLE =500)

    //创建httpClient实例
    CloseableHttpClient client = HttpClients.createDefault();
    //汽车之家api接口
    String apiPath = "https://www.autohome.com.cn/ashx/index/GetHomeFindCar.ashx";
    //创建get方法请求实例
    HttpGet httpGet = new HttpGet(apiPath);
    //添加表头,text/xml表示XML格式
    httpGet.addHeader("content-type","text/xml");
    //调用HttpClient实例执行GET实例,返回response
    HttpResponse response = client.execute(httpGet);
    //解析response,这个过程主要取决于获取的json格式,是一个对象还是一个数组,放到后面详解
    String result = EntityUtils.toString(response.getEntity());
    //释放连接
    response.close();
    client.close();
    Nach dem Login kopieren
    Verwenden Sie JSONArray und JSONObject, um JSON-Strings zu analysieren

    Bevor wir den JSON-String analysieren, müssen wir zunächst das Format des JSON-Strings bestimmen. und verwenden Sie verschiedene Analysemethoden für verschiedene Formate. Zum Beispiel: numerischer Wert, Zeichenfolge, Array, Objektarray oder Array-Objekt. Der entscheidende Punkt ist die Verwendung von geschweiften Klammern und eckigen Klammern Achten Sie auf diese beiden Symbole, da diese zu JSON-Parsing-Fehlern führen können JSON-Array, um jedes JSON-Objekt abzurufen und dann die Daten aus dem JSON-Objekt zu lesen.
    if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
        String result = EntityUtils.toString(response.getEntity());//解析response
    }//getStatusLine()方法返回保存请求状态的StatusLine对象,getStatusCode()获取状态码
    Nach dem Login kopieren

    Speichern Sie die Daten des instanziierten Objekts in der Datenbank.

    Im Springboot-Framework kann Mybatis-Generator Entitätsdateien auf Domänenebene und XML-Dateien generieren , Mapper-Dateien und entsprechende Servicedateien können uns sparen. Beim Schreiben von SQL-Anweisungen können wir die entsprechende Methode direkt in der Serviceschicht aufrufen.

    //json数值
    {
        "key" : 520,
        "key1" : 1314
    }    
    //json字符串
    {
        "key" : "我爱你",
        "key1" : "一生一世"
    }
    //json数组
    {
        "key" : [520, 1314],
        "key1" : [520, 3344]
    }
    //json对象数组
    {
        "我" : [
                      {"key": "我爱你"},
                      {"key1": "一生一世"}
        ]
    }
    //json数组对象
    {
        "我" : {
                      [520,1314],
                      ["我爱你", "一生一世"]
        }
    }
    Nach dem Login kopieren

    Der vollständige Code lautet wie folgt

    //将json字符串解析成json数组的形式
    JSONArray jsonArray = JSONArray.parseArray(result);
    //利用遍历解析json数组,并在循环中解析每一个json对象
    for (int i = 0; i < jsonArray.size(); i++) {
        //将json数组解析为每一个jsonObject对象
        JSONObject object=jsonArray.getJSONObject(i);
        //实例化一个dao层或者domain层的对象
        CarBrand Brand = new CarBrand();
        //将json对象中的数据写入实例化的对象中
        //注意object读取的字段要和json对象中的字段一样,否则无法解析
        Brand.setId(object.getInteger("id"));
        Brand.setName(object.getString("name"));
        Brand.setGroup(object.getString("letter"));
    }
    Nach dem Login kopieren

    Das obige ist der detaillierte Inhalt vonWie ruft Java die Schnittstelle auf, um JSON-Daten abzurufen und nach dem Parsen in der Datenbank zu speichern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Verwandte Etiketten:
    Quelle:yisu.com
    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage