【Java】post请求示例

文章介绍了如何使用Spring的RestTemplate工具发送到CCB银行的两个API请求,一个是POST方式的getUserInfo,另一个是GET查询的queryAccountBalance,涉及参数封装和请求头设置。

使用上一篇文章分享的RestTemplate工具 发送post请求示例。

已知调用接口:http://www.ccb.com/userInfoConstruct/getUserInfo,传参方式为body形式。参数封装
@Data
public class UserDto {

    //用户唯一编码
    private String uniqueCode;

    //对应用户的唯一安全识别码
    private String accountCode;

    //账户真实名称
    private String name;
    
    //用户的星级:红石:(省正副级以上), 玉硅(军职级),翡金(国家处级),至尊(业务:行长),白金(业务:副行长),黄金:客服一星级经理
    private String accountLevel;

}
参数形式:body,请求方式 post
public class RestTemplateUtilsDemo {
    public static void main(String[] args) {
        //获取建设银行的用户信息
        String url = "http://www.ccb.com/userInfoConstruct/getUserInfo";

        UserDto dto = new UserDto();
        dto.setAccountCode("15835965487965649466154");
        dto.setName("至尊人物,贷款要降低至1.8个点+送一瓶飞天");
        dto.setUniqueCode("15835965487965649466154");
        dto.setAccountLevel("至尊");
        
        //请求头设置
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);
        httpHeaders.add("Authorization", "Bearer " + "token");
        httpHeaders.add("bankSign", "bankSign");
        httpHeaders.add("level", dto.getAccountLevel());
        
        //参数处理完成,然后请求接口
        log.info("请求建行用户信息:链接:{},dto:{}",url, JSON.toJSONString(dto));
        String jsonObject = RestTemplateUtils.post(null, url, dto, httpHeaders, String.class);
        log.info("请求建行用户信息:{}",JSON.toJSONString(jsonObject));

    }
}
调用接口:http://www.ccb.com/userInfoConstruct/queryAccountBalance,传参方式为query形式,参数封装
@Data
public class AccountBalanceDto {

    //用户唯一编码
    private String uniqueCode;

    //对应用户的唯一安全识别码
    private String accountCode;

    //账户号
    private String accountNumber;

}

参数形式:query,请求方式 post
public class RestTemplateUtilsDemo {
    public static void main(String[] args) {
        //获取账户的余额
        String url = "http://www.ccb.com/userInfoConstruct/queryAccountBalance";

        AccountBalanceDto balanceDto = new AccountBalanceDto();
        balanceDto.setAccountCode("15835965487965649466154");
        balanceDto.setUniqueCode("15835965487965649466154");
        balanceDto.setAccountNumber("6217487965649466154");

        //请求头设置
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);
        httpHeaders.add("Authorization", "Bearer " + "token");
        httpHeaders.add("bankSign", "bankSign");


        LinkedMultiValueMap<String, String> queryParamMap = new LinkedMultiValueMap<>();
        queryParamMap.add("uniqueCode",balanceDto.getUniqueCode());
        queryParamMap.add("accountCode",balanceDto.getAccountCode());
        queryParamMap.add("accountNumber",balanceDto.getAccountNumber());

        //参数处理完成,然后请求接口
        log.info("请求账户余额:链接:{},dto:{}",url, JSON.toJSONString(queryParamMap));
        String jsonObject = RestTemplateUtils.post(null, url, queryParamMap, httpHeaders, String.class);
        log.info("请求账户余额结果:{}",JSON.toJSONString(jsonObject));

    }
}
query的原始形式:
获取账户的余额
    String url = "http://www.ccb.com/userInfoConstruct/queryAccountBalance?uniqueCode=xxx&accountCode=xxx&accountNumber=xxxx";
public class RestTemplateUtilsDemo {
    public static void main(String[] args) {
        //获取账户的余额
        String url = "http://www.ccb.com/userInfoConstruct/queryAccountBalance";

        AccountBalanceDto balanceDto = new AccountBalanceDto();
        balanceDto.setAccountCode("15835965487965649466154");
        balanceDto.setUniqueCode("15835965487965649466154");
        balanceDto.setAccountNumber("6217487965649466154");

        //请求头设置
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);
        httpHeaders.add("Authorization", "Bearer " + "token");
        httpHeaders.add("bankSign", "bankSign");


        StringBuilder sb = new StringBuilder();
        sb.append(url)
                .append("?uniqueCode=")
                .append(balanceDto.getUniqueCode())
                .append("&accountCode=")
                .append(balanceDto.getAccountCode())
                .append("&accountNumber=")
                .append(balanceDto.getAccountNumber());

        //参数处理完成,然后请求接口
        log.info("请求账户余额:链接:{},dto:{}",url, JSON.toJSONString(balanceDto));
        String jsonObject = RestTemplateUtils.post(null, sb.toString(),null,null, httpHeaders, String.class);
        log.info("请求账户余额结果:{}",JSON.toJSONString(jsonObject));
    }
}

根据业务不同,传参不同,来分别满足自己的业务即可。

<think>好的,用户需要Java发送HTTP POST请求示例代码。首先,我得回忆一下Java中常用的方法。用户提到了HttpPost和HttpURLConnection,参考引用里的资料,有几种不同的实现方式。 用户可能希望看到不同库的示例,比如原生的HttpURLConnection和第三方库如Apache HttpClient。引用1和引用4提到了HttpPost,属于Apache的库,而引用2和3用了HttpURLConnection。需要区分这两种方法。 还要考虑代码的清晰度和实用性。用户可能想要一个简单直接的例子,所以应该分步骤说明,比如创建连接、设置请求方法、添加参数、处理响应等。同时要注意异常处理和资源关闭,像引用4提到的try-with-resources很重要,避免资源泄漏。 是否需要处理HTTPS?引用3提到了HttpsURLConnection,可以包含一个例子,但可能用户主要需要HTTP。不过还是可以简要提一下,或者放在另一个示例里。 参数设置方面,用户可能想知道如何添加表单参数或JSON数据。例如,使用URL编码形式还是JSON体。引用中的例子有的是表单参数,有的是输出流写入数据,需要分别展示。 另外,用户可能关心请求头的设置,比如Content-Type,这在POST请求中很重要。不同的内容类型需要不同的处理方式,比如application/x-www-form-urlencoded和application/json。 总结下来,应该提供两个主要示例:一个使用HttpURLConnection(原生),另一个使用Apache HttpClient(第三方库)。每个示例都包括代码、步骤说明和注意事项。同时,要提到异常处理和资源管理,确保代码的健壮性。 可能还需要比较两种方法的优缺点,比如HttpURLConnection是标准库无需额外依赖,而Apache HttpClient更强大灵活。用户可以根据项目需求选择适合的方式。 最后,检查引用是否正确对应,比如引用2和3对应HttpURLConnection,引用1和4对应Apache的例子。确保每个代码示例后附上正确的引用来源,帮助用户追溯。</think>以下为您提供两种常用的Java发送HTTP POST请求实现方案: ### 方法一:使用原生HttpURLConnection(推荐基础场景) ```java import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets; public class PostExample { public static void main(String[] args) throws Exception { // 创建连接对象 URL url = new URL("https://api.example.com/login"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 设置请求属性 conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setDoOutput(true); // 构建请求参数 String postData = "username=test&password=123456"; // 发送请求(使用try-with-resources自动关闭资源) try(OutputStream os = conn.getOutputStream()) { byte[] input = postData.getBytes(StandardCharsets.UTF_8); os.write(input, 0, input.length); } // 处理响应 int responseCode = conn.getResponseCode(); System.out.println("Response Code: " + responseCode); } } // 引用自标准库实现方案[^2][^3] ``` ### 方法二:使用Apache HttpClient(推荐企业级应用) 需要先添加依赖: ```xml <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.13</version> </dependency> ``` 实现代码: ```java import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; public class HttpClientPost { public static void main(String[] args) throws Exception { try (CloseableHttpClient client = HttpClients.createDefault()) { HttpPost post = new HttpPost("https://api.example.com/data"); // 设置JSON请求体 String jsonBody = "{\"name\":\"John\",\"age\":30}"; post.setEntity(new StringEntity(jsonBody)); post.setHeader("Content-type", "application/json"); // 执行请求 HttpResponse response = client.execute(post); System.out.println("Status Code: " + response.getStatusLine().getStatusCode()); } } } // 引用自Apache实现方案[^1][^4] ``` ### 关键点说明: 1. **连接管理**:两种方法都采用try-with-resources自动关闭连接 2. **参数编码**:注意设置正确的Content-Type(表单/x-www-form-urlencoded或JSON) 3. **异常处理**:实际使用中需添加try-catch块处理网络异常 4. **性能优化**:推荐复用HttpClient实例提升性能
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值