电商商城定制开发Java 调用第三方接口方法

Java 电商商城定制开发电商商城定制开发调用第三方接口方法

一、 通过JDK网络类Java.net.HttpURLConnection

1.java.net电商商城定制开发包下的原生java 提供的http请求

使用步骤:

1、电商商城定制开发通过统一资源定位器(java.net.URL)电商商城定制开发获取连接器(java.net.URLConnection)。

2、电商商城定制开发设置请求的参数。

3、发送请求。

4、电商商城定制开发以输入流的形式获取返回内容。

5、电商商城定制开发关闭输入流。

2.HttpClientUtil工具类

/** * jdk 调用第三方接口 * @author hsq */public class HttpClientUtil2 {    /**     * 以post方式调用对方接口方法     * @param pathUrl     */    public static String doPost(String pathUrl, String data){        OutputStreamWriter out = null;        BufferedReader br = null;        String result = "";        try {            URL url = new URL(pathUrl);            //打开和url之间的连接            HttpURLConnection conn = (HttpURLConnection) url.openConnection();            //设定请求的方法为"POST",默认是GET            //post与get的不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内。            conn.setRequestMethod("POST");            //设置30秒连接超时            conn.setConnectTimeout(30000);            //设置30秒读取超时            conn.setReadTimeout(30000);            // 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在http正文内,因此需要设为true, 默认情况下是false;            conn.setDoOutput(true);            // 设置是否从httpUrlConnection读入,默认情况下是true;            conn.setDoInput(true);            // Post请求不能使用缓存            conn.setUseCaches(false);            //设置通用的请求属性            conn.setRequestProperty("accept", "*/*");            conn.setRequestProperty("connection", "Keep-Alive");  //维持长链接            conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");            //连接,从上述url.openConnection()至此的配置必须要在connect之前完成,            conn.connect();            /**             * 下面的三句代码,就是调用第三方http接口             */            //获取URLConnection对象对应的输出流            //此处getOutputStream会隐含的进行connect(即:如同调用上面的connect()方法,所以在开发中不调用上述的connect()也可以)。            out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");            //发送请求参数即数据            out.write(data);            //flush输出流的缓冲            out.flush();            /**             * 下面的代码相当于,获取调用第三方http接口后返回的结果             */            //获取URLConnection对象对应的输入流            InputStream is = conn.getInputStream();            //构造一个字符流缓存            br = new BufferedReader(new InputStreamReader(is));            String str = "";            while ((str = br.readLine()) != null){                result += str;            }            System.out.println(result);            //关闭流            is.close();            //断开连接,disconnect是在底层tcp socket链接空闲时才切断,如果正在被其他线程使用就不切断。            conn.disconnect();        } catch (Exception e) {            e.printStackTrace();        }finally {            try {                if (out != null){                    out.close();                }                if (br != null){                    br.close();                }            } catch (IOException e) {                e.printStackTrace();            }        }        return result;    }    /**     * 以get方式调用对方接口方法     * @param pathUrl     */    public static String doGet(String pathUrl){        BufferedReader br = null;        String result = "";        try {            URL url = new URL(pathUrl);            //打开和url之间的连接            HttpURLConnection conn = (HttpURLConnection) url.openConnection();            //设定请求的方法为"GET",默认是GET            //post与get的不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内。            conn.setRequestMethod("GET");            //设置30秒连接超时            conn.setConnectTimeout(30000);            //设置30秒读取超时            conn.setReadTimeout(30000);            // 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在http正文内,因此需要设为true, 默认情况下是false;            conn.setDoOutput(true);            // 设置是否从httpUrlConnection读入,默认情况下是true;            conn.setDoInput(true);            // Post请求不能使用缓存(get可以不使用)            conn.setUseCaches(false);            //设置通用的请求属性            conn.setRequestProperty("accept", "*/*");            conn.setRequestProperty("connection", "Keep-Alive");  //维持长链接            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");            //连接,从上述url.openConnection()至此的配置必须要在connect之前完成,            conn.connect();            /**             * 下面的代码相当于,获取调用第三方http接口后返回的结果             */            //获取URLConnection对象对应的输入流            InputStream is = conn.getInputStream();            //构造一个字符流缓存            br = new BufferedReader(new InputStreamReader(is, "UTF-8"));            String str = "";            while ((str = br.readLine()) != null){                result += str;            }            System.out.println(result);            //关闭流            is.close();            //断开连接,disconnect是在底层tcp socket链接空闲时才切断,如果正在被其他线程使用就不切断。            conn.disconnect();        } catch (Exception e) {            e.printStackTrace();        }finally {            try {                if (br != null){                    br.close();                }            } catch (IOException e) {                e.printStackTrace();            }        }        return result;    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160

3.第三方api接口

/** * @author hsq */@RestController@RequestMapping("/api")public class HelloWorld {    private static final Logger log= LoggerFactory.getLogger(HelloWorld.class);    @GetMapping ("/getHello")    public Result getHelloWord(){        log.info("进入到api接口.......");        return Result.success("hello world api get 接口数据");    }    @PostMapping("/postHello")    public Result postHelloWord(@RequestBody User user){        log.info("进入post 方法.....");        System.out.println(user.toString());        return Result.success("hello world api post接口数据");    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

4.测试类

 @Test    public void testJDKApi(){        //测试get方法        String s = HttpClientUtil2.doGet("http://localhost:9092/api/getHello");        System.out.println("get方法:"+s);        //测试post方法        User user = new User();        user.setUname("胡萝卜");        user.setRole("普通用户");        //把对象转换为json格式        String s1 = JsonUtil.toJson(user);        String postString = HttpClientUtil2.doPost("http://localhost:9092/api/postHello",s1);        System.out.println("post方法:"+postString);    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

结果:

二、通过Apache common封装好的HttpClient

1.引入依赖

 		<!--HttpClient-->        <dependency>            <groupId>commons-httpclient</groupId>            <artifactId>commons-httpclient</artifactId>            <version>3.1</version>        </dependency>        <!--json-->        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>fastjson</artifactId>            <version>1.2.28</version>        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2.httpClientUtil

/**	*httpClient的get请求方式     * 使用GetMethod来访问一个URL对应的网页实现步骤:     * 1.生成一个HttpClient对象并设置相应的参数;     * 2.生成一个GetMethod对象并设置响应的参数;     * 3.用HttpClient生成的对象来执行GetMethod生成的Get方法;     * 4.处理响应状态码;     * 5.若响应正常,处理HTTP响应内容;     * 6.释放连接。 * @author hsq */public class HttpClientUtil {    /**     * @param url     * @param charset     * @return     */    public static String doGet(String url, String charset){        /**         * 1.生成HttpClient对象并设置参数         */        HttpClient httpClient = new HttpClient();        //设置Http连接超时为5秒        httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(5000);        /**         * 2.生成GetMethod对象并设置参数         */        GetMethod getMethod = new GetMethod(url);        //设置get请求超时为5秒        getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 5000);        //设置请求重试处理,用的是默认的重试处理:请求三次        getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());        String response = "";        /**         * 3.执行HTTP GET 请求         */        try {            int statusCode = httpClient.executeMethod(getMethod);            /**             * 4.判断访问的状态码             */            if (statusCode != HttpStatus.SC_OK){                System.err.println("请求出错:" + getMethod.getStatusLine());            }            /**             * 5.处理HTTP响应内容             */            //HTTP响应头部信息,这里简单打印            Header[] headers = getMethod.getResponseHeaders();            for (Header h: headers){                System.out.println(h.getName() + "---------------" + h.getValue());            }            //读取HTTP响应内容,这里简单打印网页内容            //读取为字节数组            byte[] responseBody = getMethod.getResponseBody();            response = new String(responseBody, charset);            System.out.println("-----------response:" + response);            //读取为InputStream,在网页内容数据量大时候推荐使用            //InputStream response = getMethod.getResponseBodyAsStream();        } catch (HttpException e) {            //发生致命的异常,可能是协议不对或者返回的内容有问题            System.out.println("请检查输入的URL!");            e.printStackTrace();        } catch (IOException e){            //发生网络异常            System.out.println("发生网络异常!");        }finally {            /**             * 6.释放连接             */            getMethod.releaseConnection();        }        return response;    }    /**     * post请求     * @param url     * @param json     * @return     */    public static String doPost(String url, JSONObject json){        HttpClient httpClient = new HttpClient();        PostMethod postMethod = new PostMethod(url);        postMethod.addRequestHeader("accept", "*/*");        postMethod.addRequestHeader("connection", "Keep-Alive");        //设置json格式传送        postMethod.addRequestHeader("Content-Type", "application/json;charset=utf-8");        //必须设置下面这个Header        postMethod.addRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36");        //添加请求参数        //postMethod.addParameter("param", json.getString("param"));        StringRequestEntity param = new StringRequestEntity(json.getString("param"));        postMethod.setRequestEntity(param);        String res = "";        try {            int code = httpClient.executeMethod(postMethod);            if (code == 200){                byte[] responseBody = postMethod.getResponseBody();                res = new String(responseBody, "UTF-8");                //res = postMethod.getResponseBodyAsString();                System.out.println(res);            }        } catch (IOException e) {            e.printStackTrace();        }        return res;    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117

3.第三方api接口

@RestController@RequestMapping("/api")public class HelloWorld {    private static final Logger log= LoggerFactory.getLogger(HelloWorld.class);    @GetMapping ("/getHello")    public Result getHelloWord(){        log.info("进入到api接口.......");        return Result.success("hello world api get 接口数据");    }    @PostMapping("/postHello")    public Result postHelloWord(@RequestBody User user){        log.info("进入post 方法.....");        System.out.println(user.toString());        return Result.success("hello world api post接口数据");    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

4.测试类

 	@Test    public void testApi() {        //测试get方法        String s = HttpClientUtil.doGet("http://localhost:9092/api/getHello", "UTF-8");        System.out.println("get方法:"+s);        //测试post方法        User user = new User();        user.setUname("胡萝卜");        user.setRole("普通用户");        JSONObject jsonObject = new JSONObject();        String s1 = JsonUtil.toJson(user);        jsonObject.put("param",s1);        String postString = HttpClientUtil.doPost("http://localhost:9092/api/postHello", jsonObject);        System.out.println("post方法:"+postString);    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

结果:

三、通过Spring的RestTemplate

1.引入依赖

导入springboot的web包

    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.1.4.RELEASE</version>    </parent>     <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>    </dependencies>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

2.RestTemplate配置类

/** * @author hsq */@Configurationpublic class RestTemplateConfig {    @Bean    public RestTemplate restTemplate(ClientHttpRequestFactory factory){        return new RestTemplate(factory);    }    @Bean    public ClientHttpRequestFactory simpleClientHttpRequestFactory(){        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();        factory.setConnectTimeout(15000);        factory.setReadTimeout(5000);        return factory;    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

3.RestTemplate实现类

/** * @author hsq */@Componentpublic class RestTemplateToInterface {    @Autowired    private RestTemplate restTemplate;    /**     * 以get方式请求第三方http接口 getForEntity     * @param url     * @return     */    public Result doGetWith1(String url){        ResponseEntity<Result> responseEntity = restTemplate.getForEntity(url, Result.class);        Result result = responseEntity.getBody();        return result;    }    /**     * 以get方式请求第三方http接口 getForObject     * 返回值返回的是响应体,省去了我们再去getBody()     * @param url     * @return     */    public Result doGetWith2(String url){        Result result  = restTemplate.getForObject(url, Result.class);        return result;    }    /**     * 以post方式请求第三方http接口 postForEntity     * @param url     * @param user     * @return     */    public String doPostWith1(String url,User user){        ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, user, String.class);        String body = responseEntity.getBody();        return body;    }    /**     * 以post方式请求第三方http接口 postForEntity     * 返回值返回的是响应体,省去了我们再去getBody()     * @param url     * @param user     * @return     */    public String doPostWith2(String url,User user){        String body = restTemplate.postForObject(url, user, String.class);        return body;    }    /**     * exchange     * @return     */    public String doExchange(String url, Integer age, String name){        //header参数        HttpHeaders headers = new HttpHeaders();        String token = "asdfaf2322";        headers.add("authorization", token);        headers.setContentType(MediaType.APPLICATION_JSON);        //放入body中的json参数        JSONObject obj = new JSONObject();        obj.put("age", age);        obj.put("name", name);        //组装        HttpEntity<JSONObject> request = new HttpEntity<>(obj, headers);        ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST, request, String.class);        String body = responseEntity.getBody();        return body;    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79

4.第三方api接口

/** * @author hsq */@RestController@RequestMapping("/api")public class HelloWorld {    private static final Logger log= LoggerFactory.getLogger(HelloWorld.class);    @GetMapping ("/getHello")    public Result getHelloWord(){        log.info("进入到api接口.......");        return Result.success("hello world api get 接口数据");    }    @PostMapping("/postHello")    public Result postHelloWord(@RequestBody User user){        log.info("进入post 方法.....");        System.out.println(user.toString());        return Result.success("hello world api post接口数据");    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

5.测试类

//注入使用@Autowiredprivate RestTemplateToInterface restTemplateToInterface;@Testpublic void testSpringBootApi(){    Result result= restTemplateToInterface.doGetWith1("http://localhost:9092/api/getHello");    System.out.println("get结果:"+result);    User user = new User();    user.setUname("胡萝卜");    user.setRole("普通用户");    String s = restTemplateToInterface.doPostWith1("http://localhost:9092/api/postHello", user);    System.out.println("post结果:"+s);}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

结果:

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发