赞
踩
实际开发中,可能需要发送http请求到第三方服务获取数据,于是就有以下应用:
依赖:
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>fastjson</artifactId>
- <version>1.2.78</version>
- </dependency>
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpclient</artifactId>
- <version>4.5.13</version>
- </dependency>
假设我需要在我的业务代码中调用该地址:
url:http://xx.xx:xxxx/user/count
请求方法:post
内容类型:application/json
请求参数:id, username
返回参数:code 响应结果 int类型
msg 响应消息 string
data 响应数据 string(json字符串)
请求头:U-Token 校对权限的token
java 发送请求代码(封装成一个方法,业务代码中调用该方法即可):
- private String sendPost(String url, String id, String username, String token) throws IOException {
- // 用于保存第三方公司定义的json格式的返回结果数据
- String result = "";
-
- // 封装请求参数并转JSON
- Map<String, String> params = new HashedMap<>();
- params.put("id", id);
- params.put("username", username);
- String jsonMap = JSON.toJSONString(params);
-
- // 创建httpclient对象
- CloseableHttpClient client = HttpClients.createDefault();
-
- // 创建post方式请求对象
- HttpPost httpPost = new HttpPost(url);
-
- // 头部携带的token
- if (token != null && !token.equals("")) {
- // 设置token,其中U-Token 是第三方(接口作者)定义的token名
- httpPost.setHeader("U-Token", token);
- }
-
- // 设置参数到请求对象中
- StringEntity entity = new StringEntity(jsonMap, "UTF-8");
- entity.setContentEncoding("UTF-8");
- entity.setContentType("application/json");
- httpPost.setEntity(entity);
-
- // 执行请求操作,并拿到结果(同步阻塞)
- CloseableHttpResponse response = client.execute(httpPost);
-
- if (response.getStatusLine().getStatusCode() == 200) {
- // 网络连接正常,将结果赋给result对象,此时result 对象保存的就是第三方公司定义的json格式的返回结果数据
- result = EntityUtils.toString(response.getEntity(), "UTF-8");
- }
-
- // 释放链接
- response.close();
-
- return result;
- }
模拟业务代码调用:
- public void test() throws IOException {
- String result = sendPost("http://xx.xx:xxxx/user/count", "1", "张三");
-
- // 非空判断
- if (!result.equals("")) {
- // 将json字符串转对象,并获取第三方的响应数据
- JSONObject jsonObject = JSON.parseObject(result);
- Integer code = jsonObject.getInteger("code");
- String msg = jsonObject.getString("msg");
- String data = jsonObject.getString("data");
- }
- }
至此,成功完成调用。
拓展:get请求
- public String sendGet(String url) throws IOException {
- String result = "";
-
- // 创建httpclient对象
- CloseableHttpClient httpClient = HttpClients.createDefault();
-
- // 创建get方式请求对象
- HttpGet httpGet = new HttpGet(url);
- httpGet.addHeader("Content-type", "application/json");
-
- // 通过请求对象获取响应对象
- CloseableHttpResponse response = httpClient.execute(httpGet);
-
- // 获取结果实体
- // 判断网络连接状态码是否正常(0--200都数正常)
- if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
- result = EntityUtils.toString(response.getEntity(), "utf-8");
- }
- // 释放链接
- response.close();
-
- return result;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。