java中调用第三方接口的三种方式

本文详细介绍了在Java中如何使用HttpClient、OKHttpClient和HttpURLConnection来调用第三方接口,包括它们的优缺点和具体实现步骤。

HttpClient

public class HttpClientUtil {
    public static String get(String url){
        //创建请求方式
        HttpGet httpGet=new HttpGet(url);
//        HttpPost ;
//        HttpPut;
//        HttpDelete
        //创建客户端对象
        HttpClient client= HttpClientBuilder.create().build();
        //执行请求 获取响应对象
        try {
            HttpResponse response=client.execute(httpGet);
            if(response.getStatusLine().getStatusCode()==200){
                //解析结果
                return EntityUtils.toString(response.getEntity());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

   
}

OKHttpClient

public class OkHttpUtil {
    public static String get(String url){
        //创建客户端对象
        OkHttpClient client=new OkHttpClient();
        //创建请求对象
        Request request=new Request.Builder().url(url).get().build();
        //获取响应
        Call call=client.newCall(request);
        //同步
        try {
           Response response= call.execute();
           return response.body().string();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    public static String getWxPay(String url,String auth){
        //创建客户端对象
        OkHttpClient client=new OkHttpClient();
        //创建请求对象
        Request request=new Request.Builder().url(url).get()
                 .addHeader("Authorization"," WECHATPAY2-SHA256-RSA2048 "+auth).build();
        //获取响应
        Call call=client.newCall(request);
        //同步
        try {
            Response response= call.execute();
            return response.body().string();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    //post
    public static String postJson(String url,String data){
        //创建客户端对象
        OkHttpClient client=new OkHttpClient();
        //创建请求的传递参数
        RequestBody rb=RequestBody.create(data,MediaType.parse("application/json;charset=UTF-8"));
        //创建请求对象
        Request request=new Request.Builder().url(url).post(rb).addHeader("Accept","application/json").build();
        //获取响应
        Call call=client.newCall(request);
        //同步
        try {
            Response response= call.execute();
            return response.body().string();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    public static String postJsonWxPay(String url,String data,String auth){
        //创建客户端对象
        OkHttpClient client=new OkHttpClient();
        //创建请求的传递参数
        RequestBody rb=RequestBody.create(data,MediaType.parse("application/json;charset=UTF-8"));
        //创建请求对象
        Request request=new Request.Builder().url(url).post(rb).
                addHeader("Accept","application/json")
                .addHeader("Authorization"," WECHATPAY2-SHA256-RSA2048 "+auth).build();
        //获取响应
        Call call=client.newCall(request);
        //同步
        try {
            Response response= call.execute();
            return response.body().string();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    public static String postKeyVal(String url,String kv){
        //创建客户端对象
        OkHttpClient client=new OkHttpClient();
        //创建请求的传递参数
        RequestBody rb=RequestBody.create(kv,MediaType.parse("application/x-www-form-urlencoded;charset=UTF-8"));
        //创建请求对象
        Request request=new Request.Builder().url(url).post(rb).build();
        //获取响应
        Call call=client.newCall(request);
        //同步
        try {
            Response response= call.execute();
            return response.body().string();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}

HttpURLConnection

public class HttpUtil {
    public static String get(String url) {
        try {
            //实例化资源对象
            URL myurl = new URL(url);
            //打开连接 获取连接对象
            HttpURLConnection huc = (HttpURLConnection) myurl.openConnection();
            //设置连接信息
            huc.setConnectTimeout(10000);
            //验证状态响应码
            if (huc.getResponseCode() == 200) {
                //接收相应数据
                String str = IOUtils.toString(huc.getInputStream());
                return str;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

 

### Java 中实现远程调用第三方接口的方法 #### 使用 Apache HttpClient 库 Apache HttpClient 是一个广泛用于 HTTP 请求的库,能够方便地发送 GET 和 POST 请求并处理响应。为了使用这个库,在项目中需引入相应的 Maven 依赖: ```xml <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.6</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId> <version>4.5.2</version> </dependency> ``` 下面是一个简单的例子来展示如何利用 `HttpClient` 发送请求以及解析 JSON 响应数据[^4]。 ```java import org.apache.http.HttpResponse; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; public class HttpExample { public static void main(String[] args) throws Exception { try (CloseableHttpClient httpClient = HttpClients.createDefault()) { HttpGet request = new HttpGet("https://api.example.com/data"); // 执行GET请求 HttpResponse response = httpClient.execute(request); String responseBody = EntityUtils.toString(response.getEntity()); System.out.println(responseBody); } } } ``` #### 调用多个第三方接口的最佳实践 当涉及到并发调用多个第三方 API 接口时,可以考虑采用异步编程模型或线程池技术以提升性能和可靠性。对于可能出现的服务不可达或其他异常情况,建议实施重试机制和服务熔断策略,从而增强系统的健壮性和用户体验[^3]。 另外,针对不同类型的错误(比如网络超时、认证失败),应该设计合理的捕获逻辑,并向用户提供清晰友好的反馈信息;同时记录详细的日志以便后续排查问题所在。 #### 获取返回值的具体做法 如果希望从接收到的内容里提取特定字段,则可以根据实际情况选用合适的序列化/反序列化工具有 Jackson 或 Gson 来转换成对象形式再访问属性值。例如,假设服务器端返回了一个标准 JSON 字符串作为回应体,那么就可以这样操作[^2]: ```java ObjectMapper mapper = new ObjectMapper(); MyDataClass dataObj = mapper.readValue(jsonString, MyDataClass.class); System.out.println(dataObj.getSomeField()); // 输出某个成员变量的值 ``` 这里假定已经定义好了对应的 POJO 类型 `MyDataClass` 并且它包含了 getter/setter 方法供映射过程使用。 #### 总结与推荐 综上所述,在 Java 开发环境中有效地调用第三方接口不仅限于选择恰当的技术栈,更重要的是遵循良好的编码习惯和技术原则,如合理规划错误处理流程、优化资源管理等措施,这样才能构建出既高效又稳定的分布式应用系统[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值