HttpClient的Post请求map参数的转换

记一个HttpClient创建Post请求,如何将Map参数转成StringEntity

public static JSONObject doPost(String url, Map<String, Object> params) throws Exception {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        try {
            HttpPost httpPost = new HttpPost(url);
            // 设置请求头为JSON
            httpPost.setHeader("Content-Type", "application/json");

            // 将Map转换为JSON字符串
            ObjectMapper objectMapper = new ObjectMapper();
            String json = objectMapper.writeValueAsString(params);
            // 设置请求体
            httpPost.setEntity(new StringEntity(json, StandardCharsets.UTF_8));
            CloseableHttpResponse response = httpClient.execute(httpPost);
            try {
                int statusCode = response.getStatusLine().getStatusCode();
                if (statusCode == 200) {
                    HttpEntity responseEntity = response.getEntity();
                    if (responseEntity!= null) {
                        String result = EntityUtils.toString(responseEntity);
                        return JSON.parseObject(result);
                    }
                } else {
                    throw new BusinessException("上传失败");
                }
            } finally {
                response.close();
            }
        } catch (Exception e) {
            throw e;
        } finally {
            httpClient.close();
        }
        throw new BusinessException("上传失败");
    }

### 如何在HTTP POST请求中发送Map作为Body参数 为了实现通过HTTP POST请求发送`Map`类型的body参数,在客户端可以使用多种库来构建和发送POST请求。下面展示的是基于Apache HttpClient库的一个例子,该库提供了强大的功能用于处理HTTP请求。 #### 使用Apache HttpClient发送带有Map Body的POST请求 ```java import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; 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; import org.apache.http.util.EntityUtils; import java.io.IOException; import java.util.HashMap; import java.util.Map; public class PostRequestExample { public static void main(String[] args) { try (CloseableHttpClient httpClient = HttpClients.createDefault()) { String url = "http://example.com/api"; HttpPost post = new HttpPost(url); Map<String, Object> map = new HashMap<>(); map.put("key1", "value1"); map.put("key2", 2); // 将Map转换成JSON字符串并设置到实体中 ObjectMapper objectMapper = new ObjectMapper(); String json = objectMapper.writeValueAsString(map); StringEntity entity = new StringEntity(json,"UTF-8"); post.setEntity(entity); post.setHeader("Accept", "application/json"); post.setHeader("Content-type", "application/json"); CloseableHttpResponse response = httpClient.execute(post); try { System.out.println(response.getStatusLine()); HttpEntity resEntity = response.getEntity(); EntityUtils.consume(resEntity); } finally { response.close(); } } catch (IOException e) { e.printStackTrace(); } } } ``` 这段代码展示了如何创建一个包含JSON格式化后的`Map`对象作为其主体内容的HTTP POST请求,并将其发送给指定的目标URL[^2]。注意这里引入了Jackson库中的`ObjectMapper`类来进行Java对象与JSON之间的序列化操作。 对于服务器端而言,如果采用Spring框架,则可以在控制器方法里利用`@RequestBody`注解配合`Map`接口直接接收到这个映射结构的数据[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值