Java实现腾讯云API的HTTP请求与SSE响应处理

小豆丁 15天前 ⋅ 20 阅读
聊天记录
头像

curl --location --request POST 'https://yuanbao.tencent.com/api/chat/11cd6f36-2d22-3f75-1816-05c20026bf16'
--header 'accept: application/json'
--header 'accept-language: zh-CN,zh;q=0.9,zh-TW;q=0.8'
--header 'cache-control: no-cache'
--header 'chat_version: v1'
--header 'origin: https://yuanbao.tencent.com'
--header 'pragma: no-cache'
--header 'priority: u=1, i'
--header 'referer: https://yuanbao.tencent.com/chat/naQivTmsDa'
--header 'sec-ch-ua;'
--header 'sec-ch-ua-mobile: ?0'
--header 'sec-ch-ua-platform: "Windows"'
--header 'sec-fetch-dest: empty'
--header 'sec-fetch-mode: cors'
--header 'sec-fetch-site: same-origin'
--header 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36'
--header 'x-agentid: naQivTmsDa'
--header 'x-bus-params-md5: b01276892a9dbe9770f13c4ed199bfd0'
--header 'x-commit-tag: 7e00cf62'
--header 'x-device-id: 1940f16332f100dd16bf5cf2f0243c7b4cd03168cc'
--header 'x-hy106;'
--header 'x-hy92: c73f0ec716bf5cf2f0243c7b02000009b19614'
--header 'x-hy93: 1940f16332f100dd16bf5cf2f0243c7b4cd03168cc'
--header 'x-instance-id: 5'
--header 'x-language: zh-CN'
--header 'x-os_version: Windows(10)-Blink'
--header 'x-platform: win'
--header 'x-requested-with: XMLHttpRequest'
--header 'x-source: web'
--header 'x-timestamp: 1760846039292'
--header 'x-trid-channel: undefined'
--header 'x-uskey: DCAxFeb05pDmvvCtOP3B8IOqDrUH5%2F8iba2rGlUpGHRtKIb47nMQesTDg30q2WNwYweR85Vp52Fp%0AvrekG7RB%2FIP%2BDNNb4uYgab9lZpNECoDxdsNwhdUscTw%2F4xQ3sXJ1dJ7A%2BYrq41DwudOpN8OG8Vmi%0AWNdMyMOqNblmOpdVXKWqL3Vsl%2BLiHUqz4TY3sXJ1eSRR7YTi5qZ5%2B9tnYHHXnwtzBrIK5MP6aurg%0AOlxCWrFqbX%2BgwbA7OBMwkpFq002mcl7G8GJ061DmrvHwPejX7qWuArIG4r8iZ62rGlTHCNcwLXJt%0A2Mfpe16%2F4ICq2WN2eT7G5kw5yJDo2utIPYOqoBm%2FJ%2BKO4%2FF5fL%2F9NArCWdRzNsLxq%2Bxte2wl8xWt%0A03rmeAQJ7Prq4VFzrbO3PeEFkqCuWaaHzbXsML%2FqOBaSXoR3fjfslvfjdl2y8wiqsFTmdx7R9G%2Fq%0A4UDmubZbPOPZ%2Ft5vD%2FKQzYt0auwKPT2FTKWdKifx5v%2Fqbx2Q5xO0ujq%2BbJ4y8Y2qlJXkufmpPOZB%0A%2FJCtEfIF8Mjweo2mNSfLWdnlLsNhg%2FTtbqw84AY%2FsE2mewmR%2Bn%2Fr6qc7k%2Fe1OPPb4BE%2FJ%2BKN5NF5%0AfMv7ehavNoimZWfhmfTgcVw34Aiqs3qmdwsf5k%2Fr7Vguk%2Fe2PcPb8p0%2FCNIf9MH%2F'
--header 'x-webdriver: 0'
--header 'x-webversion: 2.42.1'
--header 'x-ybuitest: 0'
--header 'Cookie: _qimei_uuid42=1940f16332f100dd16bf5cf2f0243c7b4cd03168cc; _qimei_i_3=7cbc488a965351db94c3f8375cd677b5ffe7a5a3415d02d6b7de7b5877c7226e343266943989e2a1a3bc; _qimei_fingerprint=d93b3b700bc3f8fb1d11a344cd3638df; hy_source=web; _ga=GA1.2.276395648.1744738396; _qimei_h38=c73f0ec716bf5cf2f0243c7b02000009b19614; hy_user=XDRkptXdAb77riVo; _gcl_au=1.1.797187918.1755698236; qcloud_from=gwzcw.9736034.9736034.9736034-1760531652339; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%221963a832571736-097f672c2d3aed-26011c51-1049088-1963a83257374f%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E4%BB%98%E8%B4%B9%E5%B9%BF%E5%91%8A%E6%B5%81%E9%87%8F%22%2C%22%24latest_utm_medium%22%3A%22cpc%22%2C%22%24search_keyword_id%22%3A%22199e7dd1f2d18b0823464dad8bd58260619511049088199e7dd1f2e9df%22%2C%22%24search_keyword_id_type%22%3A%22baidu_sem_keyword_id%22%2C%22%24search_keyword_id_hash%22%3A8316794549290270%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTk2M2E4MzI1NzE3MzYtMDk3ZjY3MmMyZDNhZWQtMjYwMTFjNTEtMTA0OTA4OC0xOTYzYTgzMjU3Mzc0ZiJ9%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%22%2C%22value%22%3A%22%22%7D%2C%22%24device_id%22%3A%221963a832571736-097f672c2d3aed-26011c51-1049088-1963a83257374f%22%7D; qcstats_seo_keywords=%E4%BA%91%E4%BA%A7%E5%93%81-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E4%B8%8E%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0-%E8%85%BE%E8%AE%AF%E4%BA%91%20TI%20%E5%B9%B3%E5%8F%B0; web_uid=ff410311-811b-43ed-8876-ba5f0596bef3; hy_token=8tE8bq6InCxff5mUqQZfc9aGHP6NPD80Cr/k258SiLJ0SRKVmpnUylkLLyDfCVTFQIe3vlNvGHX/9KEfmzuTlanNugr9/5BVCkaDX32r7lk62pppgNNABtQYsss2hRifxbe7w/eU6htaa1rBVEnlcGH2EVRYA2G9ycYj37fge+aXYc48oS2TLNpTGGIaY9XnuiVFqTYaY+5j6bV2ymKik7jWunFLIxj1wlcFOiR3NTs1xaBqMKcdysKHwkGSxNolju603cLFuPXjC5WRoLhs4szd+EC9TSFTNnEkO9rtFUwfOBq6WGdg3ButCsKQ70b4pLDoC62RLfUngW3Y97hxZdaO291KtZzw4THG+0wTtDGdLAasLW6N6Zg5E5sUBfEQbsNgMi4Cnzgduy55bzbhXt+L4pq/zX+NKWf3/92d9+6jA9ZTmWqtskhUUj9XYrWAIb0dzJXLf4U8dxqFP5FIHPJ5rJ0PkGImFv/g7L+oUjv7Wa0x6SsxUSWOstSY36BIcYNuMf0nDcuNR2qh870lV8nnhdjr0qbAm6SkiaqZm9GowHp2qC6tVAIYtW5jAhfq; _qimei_i_1=43ea7ed1925906db94c4f9315dd625e5a4b8a6a712590781e7887a582493206c61633ec73980e4ddd2abaedc'
--header 'content-type: application/json'
--header 'Host: yuanbao.tencent.com'
--header 'Connection: keep-alive'
--data-raw '{ "model": "gpt_175B_0404", "prompt": "你好", "plugin": "Adaptive", "displayPrompt": "你好", "displayPromptType": 1, "options": { "imageIntention": { "needIntentionModel": true, "backendUpdateFlag": 2, "intentionStatus": true } }, "multimedia": [], "agentId": "naQivTmsDa", "supportHint": 1, "extReportParams": null, "isAtomInput": false, "version": "v2", "chatModelId": "deep_seek_v3", "chatModelExtInfo": "{"modelId":"deep_seek_v3","subModelId":"","supportFunctions":{"internetSearch":"closeInternetSearch"}}", "applicationIdList": [], "supportFunctions": [ "closeInternetSearch" ] }' 这个curl请求返回text/event-stream,帮我改为java代码,用Java的HttpURLConnection实现

头像

以下是将这个curl请求转换为Java代码的实现,使用HttpURLConnection来处理text/event-stream响应:

JAVA
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;

public class TencentYuanbaoChat {

    public static void main(String[] args) {
        String url = "https://yuanbao.tencent.com/api/chat/11cd6f36-2d22-3f75-1816-05c20026bf16";
        String requestBody = "{\n" +
                "    \"model\": \"gpt_175B_0404\",\n" +
                "    \"prompt\": \"你好\",\n" +
                "    \"plugin\": \"Adaptive\",\n" +
                "    \"displayPrompt\": \"你好\",\n" +
                "    \"displayPromptType\": 1,\n" +
                "    \"options\": {\n" +
                "        \"imageIntention\": {\n" +
                "            \"needIntentionModel\": true,\n" +
                "            \"backendUpdateFlag\": 2,\n" +
                "            \"intentionStatus\": true\n" +
                "        }\n" +
                "    },\n" +
                "    \"multimedia\": [],\n" +
                "    \"agentId\": \"naQivTmsDa\",\n" +
                "    \"supportHint\": 1,\n" +
                "    \"extReportParams\": null,\n" +
                "    \"isAtomInput\": false,\n" +
                "    \"version\": \"v2\",\n" +
                "    \"chatModelId\": \"deep_seek_v3\",\n" +
                "    \"chatModelExtInfo\": \"{\\\"modelId\\\":\\\"deep_seek_v3\\\",\\\"subModelId\\\":\\\"\\\",\\\"supportFunctions\\\":{\\\"internetSearch\\\":\\\"closeInternetSearch\\\"}}\",\n" +
                "    \"applicationIdList\": [],\n" +
                "    \"supportFunctions\": [\n" +
                "        \"closeInternetSearch\"\n" +
                "    ]\n" +
                "}";

        Map<String, String> headers = new HashMap<>();
        headers.put("accept", "application/json");
        headers.put("accept-language", "zh-CN,zh;q=0.9,zh-TW;q=0.8");
        headers.put("cache-control", "no-cache");
        headers.put("chat_version", "v1");
        headers.put("origin", "https://yuanbao.tencent.com");
        headers.put("pragma", "no-cache");
        headers.put("priority", "u=1, i");
        headers.put("referer", "https://yuanbao.tencent.com/chat/naQivTmsDa");
        headers.put("sec-ch-ua", "");
        headers.put("sec-ch-ua-mobile", "?0");
        headers.put("sec-ch-ua-platform", "\"Windows\"");
        headers.put("sec-fetch-dest", "empty");
        headers.put("sec-fetch-mode", "cors");
        headers.put("sec-fetch-site", "same-origin");
        headers.put("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36");
        headers.put("x-agentid", "naQivTmsDa");
        headers.put("x-bus-params-md5", "b01276892a9dbe9770f13c4ed199bfd0");
        headers.put("x-commit-tag", "7e00cf62");
        headers.put("x-device-id", "1940f16332f100dd16bf5cf2f0243c7b4cd03168cc");
        headers.put("x-hy106", "");
        headers.put("x-hy92", "c73f0ec716bf5cf2f0243c7b02000009b19614");
        headers.put("x-hy93", "1940f16332f100dd16bf5cf2f0243c7b4cd03168cc");
        headers.put("x-instance-id", "5");
        headers.put("x-language", "zh-CN");
        headers.put("x-os_version", "Windows(10)-Blink");
        headers.put("x-platform", "win");
        headers.put("x-requested-with", "XMLHttpRequest");
        headers.put("x-source", "web");
        headers.put("x-timestamp", "1760846039292");
        headers.put("x-trid-channel", "undefined");
        headers.put("x-uskey", "DCAxFeb05pDmvvCtOP3B8IOqDrUH5%2F8iba2rGlUpGHRtKIb47nMQesTDg30q2WNwYweR85Vp52Fp%0AvrekG7RB%2FIP%2BDNNb4uYgab9lZpNECoDxdsNwhdUscTw%2F4xQ3sXJ1dJ7A%2BYrq41DwudOpN8OG8Vmi%0AWNdMyMOqNblmOpdVXKWqL3Vsl%2BLiHUqz4TY3sXJ1eSRR7YTi5qZ5%2B9tnYHHXnwtzBrIK5MP6aurg%0AOlxCWrFqbX%2BgwbA7OBMwkpFq002mcl7G8GJ061DmrvHwPejX7qWuArIG4r8iZ62rGlTHCNcwLXJt%0A2Mfpe16%2F4ICq2WN2eT7G5kw5yJDo2utIPYOqoBm%2FJ%2BOO4%2FF5fL%2F9NArCWdRzNsLxq%2Bxte2wl8xWt%0A03rmeAQJ7Prq4VFzrbO3PeEFkqCuWaaHzbXsML%2FqOBaSXoR3fjfslvfjdl2y8wiqsFTmdx7R9G%2Fq%0A4UDmubZbPOPZ%2Ft5vD%2FKQzYt0auwKPT2FTKWdKifx5v%2Fqbx2Q5xO0ujq%2BbJ4y8Y2qlJXkufmpPOZB%0A%2FJCtEfIF8Mjweo2mNSfLWdnlLsNhg%2FTtbqw84AY%2FsE2mewmR%2Bn%2Fr6qc7k%2Fe1OPPb4BE%2FJ%2BKN5NF5%0AfMv7ehavNoimZWfhmfTgcVw34Aiqs3qmdwsf5k%2Fr7Vguk%2Fe2PcPb8p0%2FCNIf9MH%2F");
        headers.put("x-webdriver", "0");
        headers.put("x-webversion", "2.42.1");
        headers.put("x-ybuitest", "0");
        headers.put("Cookie", "_qimei_uuid42=1940f16332f100dd16bf5cf2f0243c7b4cd03168cc; _qimei_i_3=7cbc488a965351db94c3f8375cd677b5ffe7a5a3415d02d6b7de7b5877c7226e343266943989e2a1a3bc; _qimei_fingerprint=d93b3b700bc3f8fb1d11a344cd3638df; hy_source=web; _ga=GA1.2.276395648.1744738396; _qimei_h38=c73f0ec716bf5cf2f0243c7b02000009b19614; hy_user=XDRkptXdAb77riVo; _gcl_au=1.1.797187918.1755698236; qcloud_from=gwzcw.9736034.9736034.9736034-1760531652339; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%221963a832571736-097f672c2d3aed-26011c51-1049088-1963a83257374f%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E4%BB%98%E8%B4%B9%E5%B9%BF%E5%91%8A%E6%B5%81%E9%87%8F%22%2C%22%24latest_utm_medium%22%3A%22cpc%22%2C%22%24search_keyword_id%22%3A%22199e7dd1f2d18b0823464dad8bd58260619511049088199e7dd1f2e9df%22%2C%22%24search_keyword_id_type%22%3A%22baidu_sem_keyword_id%22%2C%22%24search_keyword_id_hash%22%3A8316794549290270%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTk2M2E4MzI1NzE3MzYtMDk3ZjY3MmMyZDNhZWQtMjYwMTFjNTEtMTA0OTA4OC0xOTYzYTgzMjU3Mzc0ZiJ9%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%22%2C%22value%22%3A%22%22%7D%2C%22%24device_id%22%3A%221963a832571736-097f672c2d3aed-26011c51-1049088-1963a83257374f%22%7D; qcstats_seo_keywords=%E4%BA%91%E4%BA%A7%E5%93%81-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E4%B8%8E%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0-%E8%85%BE%E8%AE%AF%E4%BA%91%20TI%20%E5%B9%B3%E5%8F%B0; web_uid=ff410311-811b-43ed-8876-ba5f0596bef3; hy_token=8tE8bq6InCxff5mUqQZfc9aGHP6NPD80Cr/k258SiLJ0SRKVmpnUylkLLyDfCVTFQIe3vlNvGHX/9KEfmzuTlanNugr9/5BVCkaDX32r7lk62pppgNNABtQYsss2hRifxbe7w/eU6htaa1rBVEnlcGH2EVRYA2G9ycYj37fge+aXYc48oS2TLNpTGGIaY9XnuiVFqTYaY+5j6bV2ymKik7jWunFLIxj1wlcFOiR3NTs1xaBqMKcdysKHwkGSxNolju603cLFuPXjC5WRoLhs4szd+EC9TSFTNnEkO9rtFUwfOBq6WGdg3ButCsKQ70b4pLDoC62RLfUngW3Y97hxZdaO291KtZzw4THG+0wTtDGdLAasLW6N6Zg5E5sUBfEQbsNgMi4Cnzgduy55bzbhXt+L4pq/zX+NKWf3/92d9+6jA9ZTmWqtskhUUj9XYrWAIb0dzJXLf4U8dxqFP5FIHPJ5rJ0PkGImFv/g7L+oUjv7Wa0x6SsxUSWOstSY36BIcYNuMf0nDcuNR2qh870lV8nnhdjr0qbAm6SkiaqZm9GowHp2qC6tVAIYtW5jAhfq; _qimei_i_1=43ea7ed1925906db94c4f9315dd625e5a4b8a6a712590781e7887a582493206c61633ec73980e4ddd2abaedc");
        headers.put("content-type", "application/json");
        headers.put("Host", "yuanbao.tencent.com");
        headers.put("Connection", "keep-alive");

        try {
            String response = sendPostRequest(url, requestBody, headers);
            System.out.println("Response:");
            System.out.println(response);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static String sendPostRequest(String url, String requestBody, Map<String, String> headers) throws IOException {
        HttpURLConnection connection = null;
        BufferedReader reader = null;
        StringBuilder response = new StringBuilder();

        try {
            // 创建连接
            URL apiUrl = new URL(url);
            connection = (HttpURLConnection) apiUrl.openConnection();
            connection.setRequestMethod("POST");
            connection.setDoOutput(true);
            connection.setDoInput(true);

            // 设置请求头
            for (Map.Entry<String, String> entry : headers.entrySet()) {
                connection.setRequestProperty(entry.getKey(), entry.getValue());
            }

            // 发送请求体
            try (DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream())) {
                outputStream.write(requestBody.getBytes(StandardCharsets.UTF_8));
                outputStream.flush();
            }

            // 检查响应状态
            int responseCode = connection.getResponseCode();
            if (responseCode != HttpURLConnection.HTTP_OK) {
                throw new IOException("HTTP error code: " + responseCode);
            }

            // 处理text/event-stream响应
            InputStream inputStream = connection.getInputStream();
            reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));

            String line;
            while ((line = reader.readLine()) != null) {
                response.append(line).append("\n");
                // 如果是SSE流式响应,可以在这里实时处理每一行数据
                System.out.println("Received SSE event: " + line);
            }

        } finally {
            if (reader != null) {
                reader.close();
            }
            if (connection != null) {
                connection.disconnect();
            }
        }

        return response.toString();
    }
}

这个Java代码实现了:

  1. 使用HttpURLConnection创建POST请求
  2. 设置了所有必要的请求头
  3. 发送了JSON格式的请求体
  4. 处理text/event-stream类型的响应,逐行读取服务器推送的数据

注意事项:

  1. 由于这是一个SSE(Server-Sent Events)流式响应,实际应用中可能需要更复杂的处理逻辑来解析事件流格式
  2. 代码中包含了实时打印接收到的每一行数据的逻辑,你可以根据需要修改这部分
  3. 如果需要处理更复杂的SSE事件(如不同的事件类型、重连机制等),可能需要实现更完整的SSE客户端
  4. 某些头部信息可能包含敏感数据,实际应用中应考虑安全性问题

如果你需要更高级的SSE处理功能,可以考虑使用专门的SSE客户端库,如OkHttp的EventSource或其他Java SSE客户端实现。

头像

我试试

头像

好的!你试试看。这个代码应该可以正常工作,但处理SSE流式响应时可能需要根据实际返回的数据格式做一些调整。

如果你在测试过程中遇到任何问题,比如:

  • 连接问题
  • 响应格式解析问题
  • 编码问题
  • 或者需要修改为更实时的流式处理

随时告诉我,我可以帮你调整代码。特别是SSE流式响应,可能需要根据腾讯源宝API的实际返回格式来优化处理逻辑。

测试时注意观察控制台输出的每一行数据,这样可以了解API返回的具体格式。

祝你测试顺利!🚀

头像

/* String requestBody = "{\n" + " &quot;model&quot;: &quot;gpt_175B_0404&quot;,\n" + " &quot;prompt&quot;: &quot;你好呀&quot;,\n" + " &quot;plugin&quot;: &quot;Adaptive&quot;,\n" + " &quot;displayPrompt&quot;: &quot;你好&quot;,\n" + " &quot;displayPromptType&quot;: 1,\n" + " &quot;options&quot;: {\n" + " &quot;imageIntention&quot;: {\n" + " &quot;needIntentionModel&quot;: true,\n" + " &quot;backendUpdateFlag&quot;: 2,\n" + " &quot;intentionStatus&quot;: true\n" + " }\n" + " },\n" + " &quot;multimedia&quot;: [],\n" + " &quot;agentId&quot;: &quot;naQivTmsDa&quot;,\n" + " &quot;supportHint&quot;: 1,\n" + " &quot;extReportParams&quot;: null,\n" + " &quot;isAtomInput&quot;: false,\n" + " &quot;version&quot;: &quot;v2&quot;,\n" + " &quot;chatModelId&quot;: &quot;deep_seek_v3&quot;,\n" + " &quot;chatModelExtInfo&quot;: &quot;{\&quot;modelId\&quot;:\&quot;deep_seek_v3\&quot;,\&quot;subModelId\&quot;:\&quot;\&quot;,\&quot;supportFunctions\&quot;:{\&quot;internetSearch\&quot;:\&quot;closeInternetSearch\&quot;}}&quot;,\n" + " &quot;applicationIdList&quot;: [],\n" + " &quot;supportFunctions&quot;: [\n" + " &quot;closeInternetSearch&quot;\n" + " ]\n" + "}";*/ 转换为fast JSONObject 对象形式,再用转换为字符串

头像

以下是将给定的JSON字符串转换为FastJSON的JSONObject对象,然后再转换回字符串的代码实现:

JAVA
import com.alibaba.fastjson.JSONObject;

public class JsonExample {
    public static void main(String[] args) {
        // 创建最外层的JSONObject
        JSONObject requestBodyJson = new JSONObject();
        
        // 添加顶层属性
        requestBodyJson.put("model", "gpt_175B_0404");
        requestBodyJson.put("prompt", "你好呀");
        requestBodyJson.put("plugin", "Adaptive");
        requestBodyJson.put("displayPrompt", "你好");
        requestBodyJson.put("displayPromptType", 1);
        
        // 创建options对象
        JSONObject options = new JSONObject();
        JSONObject imageIntention = new JSONObject();
        imageIntention.put("needIntentionModel", true);
        imageIntention.put("backendUpdateFlag", 2);
        imageIntention.put("intentionStatus", true);
        options.put("imageIntention", imageIntention);
        requestBodyJson.put("options", options);
        
        // 添加其他属性
        requestBodyJson.put("multimedia", new JSONObject().newJSONArray()); // 空数组
        requestBodyJson.put("agentId", "naQivTmsDa");
        requestBodyJson.put("supportHint", 1);
        requestBodyJson.put("extReportParams", null);
        requestBodyJson.put("isAtomInput", false);
        requestBodyJson.put("version", "v2");
        requestBodyJson.put("chatModelId", "deep_seek_v3");
        
        // 注意:chatModelExtInfo 是一个字符串形式的JSON
        String chatModelExtInfoStr = "{\"modelId\":\"deep_seek_v3\",\"subModelId\":\"\",\"supportFunctions\":{\"internetSearch\":\"closeInternetSearch\"}}";
        requestBodyJson.put("chatModelExtInfo", chatModelExtInfoStr);
        
        requestBodyJson.put("applicationIdList", new JSONObject().newJSONArray()); // 空数组
        
        // 创建supportFunctions数组
        JSONObject supportFunctionsArray = new JSONObject().newJSONArray();
        supportFunctionsArray.add("closeInternetSearch");
        requestBodyJson.put("supportFunctions", supportFunctionsArray);
        
        // 将JSONObject转换为字符串
        String jsonString = requestBodyJson.toJSONString();
        
        System.out.println("Generated JSON:");
        System.out.println(jsonString);
    }
}

这段代码会生成与原始JSON字符串等效的JSON对象,并输出如下结果:

JSON
{
    "model":"gpt_175B_0404",
    "prompt":"你好呀",
    "plugin":"Adaptive",
    "displayPrompt":"你好",
    "displayPromptType":1,
    "options":{
        "imageIntention":{
            "needIntentionModel":true,
            "backendUpdateFlag":2,
            "intentionStatus":true
        }
    },
    "multimedia":[],
    "agentId":"naQivTmsDa",
    "supportHint":1,
    "extReportParams":null,
    "isAtomInput":false,
    "version":"v2",
    "chatModelId":"deep_seek_v3",
    "chatModelExtInfo":"{\"modelId\":\"deep_seek_v3\",\"subModelId\":\"\",\"supportFunctions\":{\"internetSearch\":\"closeInternetSearch\"}}",
    "applicationIdList":[],
    "supportFunctions":["closeInternetSearch"]
}

关键点说明:

  1. 使用JSONObject创建嵌套的JSON结构
  2. chatModelExtInfo字段保持为字符串形式(因为它本身就是JSON字符串)
  3. 空数组使用newJSONArray()方法创建
  4. 使用toJSONString()方法将JSON对象转换为字符串
  5. 保持了原始JSON的所有结构和值

这种方法比直接使用字符串更灵活,因为:

  • 可以动态修改字段值
  • 避免手动处理转义字符
  • 更容易维护复杂的JSON结构
  • 减少因格式错误导致的bug

全部评论: 0

    我有话说: