首页 > 编程语言 >Java调用第三方接口获取数据并存储,思路加代码

Java调用第三方接口获取数据并存储,思路加代码

时间:2024-04-14 17:12:04浏览次数:24  
标签:Java http 接口 zsp 获取数据 import apache org com

思路:

1.根据第三方接口返回的字段来创建实体类,用来接收数据

2.建立连接,提供两种方式。来获取数据

3.实体类转换并存储

方法一:URL 建立连接进行接收数据

依赖

<dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
        </dependency>
 
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.80</version>
        </dependency>

首先模拟一个接口,返回数据

controller层 用的mybatis-plus

package com.zsp.chaoshi.controller;
 
 
import com.zsp.chaoshi.pojo.Jiushui;
import com.zsp.chaoshi.service.JiushuiService;
import com.zsp.chaoshi.service.SavehttpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
 
import org.springframework.web.bind.annotation.RestController;
 
import java.util.List;
 
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author zsp
 * @since 2022-04-25
 */
@CrossOrigin
@RestController
@RequestMapping("/savehttp")
public class SavehttpController {
    @Autowired
    private JiushuiService jiushuiService;
    @Autowired
    private SavehttpService savehttpService;
 
/**
 模拟对外暴露的接口,也就是获取数据的接口
 */
    @GetMapping("/doGetControllerOne")
    public List<Jiushui> doHttp(){
        List<Jiushui> list = jiushuiService.list();
        return list;
    }
 
/**
 获取接口并保存到数据库的方法
 */
    @GetMapping("/saveMysql")
    public String saveMysql(){
        savehttpService.saveMysql();
        return "存入成功";
    }
}
 

接收数据对应的pojo类。

package com.zsp.chaoshi.pojo;
 
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
 
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
 
/**
 * <p>
 * 
 * </p>
 *
 * @author zsp
 * @since 2022-04-25
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class Savehttp extends Model<Savehttp> implements Serializable {
 
    private static final long serialVersionUID=1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
 
    private String name;
 
    private Integer jiage;
 
    private String tupian;
 
    private Integer isdeleted;
 
    @TableField("VERSION")
    private Integer version;
 
    private int sex;
 
 
}

service层

package com.zsp.chaoshi.service;
 
import com.zsp.chaoshi.pojo.Savehttp;
import com.baomidou.mybatisplus.extension.service.IService;
 
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zsp
 * @since 2022-04-25
 */
public interface SavehttpService extends IService<Savehttp> {
 
    void saveMysql();
}

serviceImpl类

package com.zsp.chaoshi.service.impl;
 
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.zsp.chaoshi.pojo.Savehttp;
import com.zsp.chaoshi.mapper.SavehttpMapper;
import com.zsp.chaoshi.service.SavehttpService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.Optional;
 
/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author zsp
 * @since 2022-04-25
 */
@Service
 
public class SavehttpServiceImpl extends ServiceImpl<SavehttpMapper, Savehttp> implements SavehttpService {
 
    @Autowired
    SavehttpMapper savehttpMapper;
 
    @Override
    public void saveMysql() {
 
        String path = "http://127.0.0.1:8083/savehttp/doGetControllerOne";
        BufferedReader in = null;
        StringBuffer result = null;
        try {
            URL url = new URL(path);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.connect();
            result = new StringBuffer();
            //读取url的响应
            in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result.append(line);
            }
            //我接受的数据是[{}]数组类型的,所以要用数组类型的JSON去接收,如果接收的是Object{},那么就要用JSONObject去接收
            //JSONArray array = JSONArray.parseArray(str); 接收的是数组格式的数据
            //JSONObject  obj = JSONArray.parseObject(str);接收的是对象
            //parseArray方法接收的是String字符串,所以不能直接传Stringbuffer进来,要进行valueOf转换
            //这里用valueOf是因为如果对象为空,则返回null字符串;否则用toString的话,对象为空则会报空指针异常
            JSONArray jsonArray = JSON.parseArray(String.valueOf(result));
            //此时存进来的jsonArray就是JSON数组
            //[
            // {
            //  "tupian":"100",
            //  "isDeleted":0,
            //  "jiage":120,
            //  "sex":1,
            //  "name":"外星人笔记本",
            //  "id":1,
            //  "version":2
            //  },
            //  {
            //  "tupian":"20",
            //  "isDeleted":0,
            //  "jiage":666,
            //  "sex":2,
            //  "name":"11111",
            //  "id":52,
            //  "version":0,
            //  }
            //]
 
            //接下来就是遍历数组下标,获取每个下标里面的数据 也就是取值
            //用法:
            // for(int i =0; i <= array.size(); i++){
            //             array[i].get(key);
            //         }
            for (int i = 0; i < jsonArray.size(); i++) {
                JSONObject jsonObject = jsonArray.getJSONObject(i); //获取
                Savehttp savehttp = new Savehttp();
                //savehttp.setId(jsonObject.getInteger("id"));
                savehttp.setName(jsonObject.getString("name"));
                savehttp.setJiage(jsonObject.getInteger("jiage"));
                savehttp.setTupian(jsonObject.getString("tupian"));
                savehttp.setIsdeleted(jsonObject.getInteger("isDeleted"));
                savehttp.setVersion(jsonObject.getInteger("version"));
                savehttp.setSex(jsonObject.getInteger("sex"));
                savehttp.insert();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

在数据转换时还有一种更简洁的方法:需要用到fastjson的依赖。
List<Savehttp> list = JSONArray.parseArray(result.toJSONString(), Savehttp.class);

savehttpMapper.saveBatch(list);

postman测试,成功。(在测试类测的时候需要将项目启动,不然报错。)

 

方法二:httpClient建立连接获取数据

package com.zsp.quartz.controller;
 
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.zsp.quartz.entity.User;
import com.zsp.quartz.entity.param.*;
import org.apache.http.HttpEntity;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
 
import javax.validation.Valid;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
 
@RestController
@RequestMapping("/test")
@CrossOrigin
public class TestController {
 
 
    @PostMapping("/list")
    public List<User> lists() {
        User u1 = User.builder().id(1L).name("张三").build();
        User u2 = User.builder().id(2L).name("李四").build();
        List<User> userList = new ArrayList<>();
        userList.add(u1);
        userList.add(u2);
        return userList;
    }
 
    @PostMapping("callInterFace")
    public void callInterFace() {
        String path = "http://localhost:8088/test/list";
        CloseableHttpClient httpClient = HttpClientBuilder.create().build();
        // 创建post请求
        HttpPost httpPost = new HttpPost(path);
        httpPost.setHeader("token", "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiemhhbmdoYW8iLCJpZCI6IjE5IiwiZXhwIjoxNjk1NjE0OTgxfQ.rDwH10MvXToi5aeCxabvNR3M9sIeE9xDD0QNaj5ynBw");
        CloseableHttpResponse response = null;
        try {
            // 由客户端执行(发送)post请求
            response = httpClient.execute(httpPost);
            // 从响应模型中获取响应实体
            HttpEntity responseEntity = response.getEntity();
            if (responseEntity != null) {
                List<User> list = JSONArray.parseArray(EntityUtils.toString(responseEntity), User.class);
                System.out.println(list);
            }
        } catch (ParseException | IOException e) {
            e.printStackTrace();
        } finally {
            try {
                // 释放资源
                if (httpClient != null) {
                    httpClient.close();
                }
                if (response != null) {
                    response.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
 
        }
    }
}
 

仅作记录。觉得有用点个赞吧。

2023/10/08更新

为了更直观,只在controller层做了演示。

package com.zsp.quartz.controller;
 
import com.alibaba.fastjson.JSONArray;
import com.zsp.quartz.entity.User;
import com.zsp.quartz.entity.param.*;
import org.apache.http.HttpEntity;
import org.apache.http.ParseException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
 
import javax.validation.Valid;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
 
@RestController
@RequestMapping("/test")
@CrossOrigin
public class TestController {
    
    @PostMapping("/test")
    @Validated
    public String login(@RequestBody @Valid DeleteByIdParam param) {
        return "你好啊,doPost方法" + param.getId();
    }
 
 
    @PostMapping("/list")
    public List<User> lists() {
        User u1 = User.builder().id(1L).name("张三").build();
        User u2 = User.builder().id(2L).name("李四").build();
        List<User> userList = new ArrayList<>();
        userList.add(u1);
        userList.add(u2);
        return userList;
    }
 
    @PostMapping("callInterFace")
    public void callInterFace() {
        String path = "http://localhost:8088/test/list";
        CloseableHttpClient httpClient = HttpClientBuilder.create().build();
        // 创建post请求
        HttpPost httpPost = new HttpPost(path);
        httpPost.setHeader("token", "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiemhhbmdoYW8iLCJpZCI6IjE5IiwiZXhwIjoxNjk1NjE0OTgxfQ.rDwH10MvXToi5aeCxabvNR3M9sIeE9xDD0QNaj5ynBw");
        CloseableHttpResponse response = null;
        try {
            // 由客户端执行(发送)post请求
            response = httpClient.execute(httpPost);
            // 从响应模型中获取响应实体
            HttpEntity responseEntity = response.getEntity();
            if (responseEntity != null) {
                List<User> list = JSONArray.parseArray(EntityUtils.toString(responseEntity), User.class);
                System.out.println(list);
            }
        } catch (ParseException | IOException e) {
            e.printStackTrace();
        } finally {
            try {
                // 释放资源
                if (httpClient != null) {
                    httpClient.close();
                }
                if (response != null) {
                    response.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
 
        }
    }
}
 

学习作为记录,大家一起进步

————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/m0_55627541/article/details/124431771

 

标签:Java,http,接口,zsp,获取数据,import,apache,org,com
From: https://www.cnblogs.com/isme-zjh/p/18134364

相关文章

  • 上海携程java高级面试题(一)
    一、JVM加载Class文件的原理机制?在面试java工程师的时候,这道题经常被问到,故需特别注意。Java中的所有类,都需要由类加载器装载到JVM中才能运行。类加载器本身也是一个类,而它的工作就是把class文件从硬盘读取到内存中。在写程序的时候,我们几乎不需要关心类的加载,因为这些都是隐式......
  • java中的final和Object类
    Java中的final和Object类目录Java中的final和Object类修饰变量修饰方法修饰类(无后类)final可以防止指令重排序,保证线程安全Object类经典面试题修饰变量基本类型(值不能改变)引用类型(引用的地址不能改变)final修饰全局变量必须提前赋值final修饰局部变量可以不在声明的时候赋值,......
  • Java登陆第四十二天——跨域
    浏览器拥有最基本的安全机制,同源策略。 违背同源策略的交互,会被浏览器认为是不安全的交互,所以不解析。什么是域?(源) 协议,域名,端口。什么是跨域? 访问不同的域。 即便协议,域名相同,端口号不一样也会违背同源策略。前后端分离后,前端服务器负责视图,后端服务器负责数据。 不......
  • JavaScript判断图片是否已经加载完毕的方法汇总_javascript技巧
    JavaScript判断图片是否已经加载完毕的方法汇总_javascript技巧 在网上有很多关于判断图片是否已经加载完毕的文章,但是有的浏览器并不适合,下面小编给大家分享一些有关JavaScript判断图片是否已经加载完毕方法汇总,具体内容如下所示:一.onload事件通过监听图片的onload事件,可......
  • java 单例模式
    单例模式(SingletonPattern)是Java中最简单的设计模式之一,这种类型的设计模式属于创建型模式。目的是确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。这样做可以节省系统资源,并且保证某些类在系统中只存在一个实例。主要解决:一个全局使用的类频繁地创建与......
  • java中的包装类
    java中的包装类为什么要有包装类在面向对象中“一切皆对象”,但是基本类型的数据不太符合这一理念,为了统一概念,因此,把基本类型包装成了引用类型的数据基本类型对象的包装类型,除了可以满足基本的类型的基本需求,还附加了其他的方法,例如:类型转化,数据类型之间的操作等等基本类型......
  • [javascript]知识点
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/18031963出自【进步*于辰的博客】目录1、其他知识点链接2、严格模式3、类、对象3.1介绍3.2自定义对象3.2.1创建对象方法3.2.2建立继承关系4、变量5、this10、关于var与......
  • Java集合
    Java集合本文中引入的源码为JDK11什么是Java集合Java集合(Java集合类)是java数据结构的实现。Java集合类是java.util包中重要内容,它允许以各种方式将元素分组,并定义了各种使这些元素更容易操作的方法。Java集合类是Java将一些基本的和使用频率极高的基础类进行封装和增强后再......
  • ES7.17.20连接时报错:java.lang.NoSuchMethodError: org.elasticsearch.client.Request
    1.报错详情:java.lang.NoSuchMethodError:org.elasticsearch.client.RequestOptions$Builder.removeHeader(Ljava/lang/String;)Lorg/elasticsearch/client/RequestOptions$Builder; atco.elastic.clients.transport.rest_client.RestClientOptions.addBuiltinHeaders(RestCli......
  • java: 无法访问org.mybatis.spring.annotation.MapperScan、类文件具有错误的版本 61.
    使用的Mybatis-spring依赖的版本3.0.1太高,将版本改为2.2.2<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version></dependency><depende......