Java使用CloseableHttpClient调用第三方接口

Java使用ApacheHttpClient进行API登录调用

1. 依赖

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.2</version>
        </dependency>

2. 接口

@PostMapping("/webGlLogin")
@ApiOperation(value = "登录")
public ResponseVo webGlLogin(@RequestBody WebGlModel webGlModel) {
    return indexService.webGlLogin(webGlModel);
}

3. 逻辑

public ResponseVo webGlLogin(WebGlModel webGlModel) {
    CloseableHttpClient httpClient = HttpClientBuilder.create().build();

    // post请求
    HttpPost httpPost = new HttpPost("https://www.ilab-x.com/open/api/v2/user/validate?username=" + webGlModel.getUsername()
            + "&password=" + webGlModel.getPassword()
            + "&nonce=" + webGlModel.getNonce()
            + "&cnonce=" + webGlModel.getCnonce()
            + "&appid=" + webGlModel.getAppid()
            + "&signature=" + webGlModel.getSignature());
    httpPost.setHeader("Content-Type", "application/json;charset=utf8");

    // 响应模型
    CloseableHttpResponse response = null;
    try {
        response = httpClient.execute(httpPost);
        HttpEntity responseEntity = response.getEntity();
        if (responseEntity != null) {
            return ResponseVo.success(HttpStatus.SUCCESS, "操作成功", EntityUtils.toString(responseEntity));
        }
    } catch (Exception e) {
        return ResponseVo.error(HttpStatus.ERROR, "请求调用失败", e.getMessage());
    } finally {
        try {
            // 释放资源
            if (httpClient != null) {
                httpClient.close();
            }
            if (response != null) {
                response.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return ResponseVo.error(HttpStatus.ERROR, "服务器异常,请联系管理员", null);
}
<think>好的,用户想在Java调用第三方接口时发送PUT请求,需要示例代码。我需要根据提供的引用内容,特别是引用[1]和[3],来构造一个使用HttpClient的PUT请求示例。 首先,引用[1]提到使用Java 11的HttpClient封装了GET和POST,PUT请求的结构应该类似。需要确定PUT请求需要哪些步骤,比如创建HttpClient实例、构建请求体、设置请求头等。 然后,引用[3]提到了CloseableHttpClient和设置请求头token,以及使用fastjson转换JSON数据。不过用户可能更倾向于使用标准的HttpClient,所以可能需要结合这两种方法。 接下来,考虑PUT请求的示例代码结构。需要包括创建请求对象,设置URI,添加头信息(如Content-Type和Authorization),处理请求体为JSON格式,并处理响应。 可能需要使用HttpRequest.BodyPublishers来封装请求体数据。同时,异常处理和资源关闭也是必要的,比如使用try-with-resources。 还要检查是否需要处理响应状态码,比如判断是否2xx成功,然后解析响应体。示例代码应展示完整的流程,包括发送请求、获取响应、处理结果。 最后,根据用户提供的引用,确保代码符合最佳实践,比如封装通用方法,但用户可能需要一个具体的PUT示例,所以先提供基础代码,再建议封装的可能性。 需要验证代码的正确性,比如使用HttpClient.newHttpClient()创建实例,正确设置PUT方法,处理JSON数据转换,并确保示例简洁明了,用户能直接使用。 可能还需要提到依赖库,比如如果是使用Jackson或Gson处理JSON,但引用中提到了fastjson,所以示例中使用fastjson的JSON.toJSONString方法,但用户可能有自己的偏好,所以可以说明可以根据需要替换。 总结步骤:创建HttpClient实例,构建PUT请求,设置请求头和JSON体,发送请求,处理响应,异常处理,代码示例展示这些步骤,并引用相关引用内容作为支持。</think>以下是在Java使用标准HttpClient发送PUT请求的完整示例代码和说明: ```java import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.time.Duration; public class PutRequestExample { // 创建可复用的HttpClient实例(Java 11+) private static final HttpClient httpClient = HttpClient.newBuilder() .version(HttpClient.Version.HTTP_2) .connectTimeout(Duration.ofSeconds(10)) .build(); public static void main(String[] args) { String apiUrl = "https://api.example.com/users/123"; String requestBody = "{\"name\":\"John\",\"age\":30}"; String authToken = "Bearer your_token_here"; try { // 构建PUT请求 HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(apiUrl)) .header("Content-Type", "application/json") .header("Authorization", authToken) .PUT(HttpRequest.BodyPublishers.ofString(requestBody)) .build(); // 发送请求并获取响应 HttpResponse<String> response = httpClient.send( request, HttpResponse.BodyHandlers.ofString() ); // 处理响应 if (response.statusCode() >= 200 && response.statusCode() < 300) { System.out.println("更新成功,响应内容:" + response.body()); } else { System.out.println("请求失败,状态码:" + response.statusCode()); } } catch (Exception e) { e.printStackTrace(); } } } ``` 关键要素说明: 1. 使用`HttpClient.newBuilder()`创建HTTP客户端,支持HTTP/2协议和超时设置[^1] 2. 请求头设置包含Content-Type和认证信息(根据接口要求调整) 3. 通过`.PUT()`方法指定请求类型,配合`BodyPublishers`处理请求体 4. 推荐使用try-with-resources处理资源(示例中未展示但实际建议使用) 5. 包含完整的响应状态码处理逻辑 针对JSON数据处理,建议添加JSON序列化: ```java // 使用FastJSON(需添加依赖) User user = new User("John", 30); String requestBody = JSON.toJSONString(user); // 使用Jackson ObjectMapper mapper = new ObjectMapper(); String requestBody = mapper.writeValueAsString(user); ``` 封装建议: 1. 创建通用请求方法,通过参数控制请求类型 2. 集中管理请求头配置 3. 使用工厂模式创建不同请求类型[^3] 4. 添加重试机制和日志记录[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值