You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java HttpClient的JSON请求体中传入变量

实现Java HttpClient POST请求动态替换JSON请求体变量的方案

方法1:直接字符串拼接(适合简单JSON结构)

直接将硬编码的value值替换为对应变量,注意保留JSON的引号格式,确保最终生成的JSON语法合法。

示例代码:

// 构建动态JSON请求体
String requestBody = "{\n" +
        "  \"facts\": [\n" +
        "    {\"name\": \"total\", \"value\": \"" + totalString + "\"},\n" +
        "    {\"name\": \"success\", \"value\": \"" + successString + "\"},\n" +
        "    {\"name\": \"failed\", \"value\": \"" + failedString + "\"},\n" +
        "    {\"name\": \"skipped\", \"value\": \"" + skippedString + "\"}\n" +
        "  ]\n" +
        "}";

// 发送POST请求
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("your-target-api-url"))
        .header("Content-Type", "application/json")
        .POST(HttpRequest.BodyPublishers.ofString(requestBody))
        .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

注意:如果变量中包含双引号、反斜杠等JSON特殊字符,需要手动转义,否则会导致JSON格式错误。

方法2:使用String.format()(更整洁的字符串替换)

将JSON模板中的value位置替换为%s占位符,通过String.format()传入变量,比直接拼接可读性更强。

示例代码:

// 定义带占位符的JSON模板
String jsonTemplate = "{\n" +
        "  \"facts\": [\n" +
        "    {\"name\": \"total\", \"value\": \"%s\"},\n" +
        "    {\"name\": \"success\", \"value\": \"%s\"},\n" +
        "    {\"name\": \"failed\", \"value\": \"%s\"},\n" +
        "    {\"name\": \"skipped\", \"value\": \"%s\"}\n" +
        "  ]\n" +
        "}";

// 替换占位符生成请求体
String requestBody = String.format(jsonTemplate, totalString, successString, failedString, skippedString);

// 后续请求发送代码同方法1

优点:变量位置清晰,代码更整洁;缺点和方法1一致,需手动处理特殊字符转义。

方法3:使用JSON序列化库(推荐,适合复杂场景)

借助Jackson或Gson这类专业JSON库构建JSON对象,自动处理格式校验和特殊字符转义,避免手动拼接的潜在错误,尤其适合复杂JSON结构。

示例(使用Jackson)

先引入Jackson依赖(Maven为例):

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>

代码实现:

import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

// 构建JSON结构
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Object> requestMap = new HashMap<>();
List<Map<String, String>> facts = new ArrayList<>();

facts.add(Map.of("name", "total", "value", totalString));
facts.add(Map.of("name", "success", "value", successString));
facts.add(Map.of("name", "failed", "value", failedString));
facts.add(Map.of("name", "skipped", "value", skippedString));

requestMap.put("facts", facts);

// 序列化为JSON字符串
String requestBody = objectMapper.writeValueAsString(requestMap);

// 后续请求发送代码同方法1

示例(使用Gson)

引入Gson依赖(Maven为例):

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>

代码实现:

import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

// 构建JSON结构
Gson gson = new Gson();
List<Map<String, String>> facts = new ArrayList<>();

facts.add(Map.of("name", "total", "value", totalString));
facts.add(Map.of("name", "success", "value", successString));
facts.add(Map.of("name", "failed", "value", failedString));
facts.add(Map.of("name", "skipped", "value", skippedString));

Map<String, Object> requestMap = Map.of("facts", facts);

// 序列化为JSON字符串
String requestBody = gson.toJson(requestMap);

// 后续请求发送代码同方法1

优点:自动处理JSON格式和特殊字符,代码可维护性高,是Java处理JSON的标准方案;缺点是需要引入第三方库,但属于开发中的常规操作。

内容的提问来源于stack exchange,提问作者wheelerlc64

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 07:52:56