java - 使用 Java 在 URL 请求中嵌套 JSON

标签 java json http

我试图在 HTTP 请求的 URL 中嵌套 JSON 对象以使用 API。原始 JSON 是

{
    "jsonrpc":"2.0",
    "id":"12345",
    "params":{
        "api_key": "e983322o",
        "preset_id": "12345678",
        "user_id": "3265999"
    },
    "method":"Tags.get"
}

(已在 REST 客户端中测试并运行)

Java中的方法是

private static void printSiteTags() {
    try {
        List<NameValuePair> params = new LinkedList<>();
        params.add(new BasicNameValuePair("jsonrpc", "2.0"));
        params.add(new BasicNameValuePair("id", "12345"));

        params.add(new BasicNameValuePair("params[0]", new BasicNameValuePair("api_key", API_KEY).toString()));
        params.add(new BasicNameValuePair("params[1]", new BasicNameValuePair("preset_id", "12345678").toString()));
        params.add(new BasicNameValuePair("params[2]", new BasicNameValuePair("user_id", "3265999").toString()));

        params.add(new BasicNameValuePair("method", "Tags.get"));

        String rawUrl = addToUrl(SITE_URL, params);
        //addToUrl just uses URLEncodedUtils
        System.out.println(rawUrl);
        URL url = new URL(rawUrl);

        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        conn.setDoOutput(true);

        Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
        for ( int c = in.read(); c != -1; c = in.read() )
            System.out.print((char)c);

    } catch (IOException e) {
        e.printStackTrace();
    }
}

原始 URL 的结果是

[base site]?jsonrpc=2.0&id=12345&%5Bparams%5D%5Bapi_key%5D=e983322o&params%5B1%5D=preset_id%3D12345678&params%5B2%5D=user_id%3D3265999&method=Tags.get

(这显然是错误的)

显然,服务器的响应是错误的。

最佳答案

JSON 应该进入请求主体。 并且请求的content-type应该是application/json。

如果您想继续使用 URLConnection,请查看此处的示例: POST request send json data java HttpUrlConnection 但请注意,您选择哪个库来格式化 json 主体并不重要,它只是一个文本 - 在您的情况下 {"jsonrpc":"2.0", "id":"12345",...

还有其他方法,例如如果您使用 httpClient,请参见以下链接中的示例 8: http://www.programcreek.com/java-api-examples/index.php?api=org.apache.commons.httpclient.methods.StringRequestEntity

关于java - 使用 Java 在 URL 请求中嵌套 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30775816/

相关文章:

java - telnet 关闭时 BufferedReader 或 Socket 不会引发异常

javascript - 如何从嵌套对象构建 HTML?

Android 创建一个 Json 字符串

javascript - 为什么这个函数不返回 JSON 字符串?

java - Tomcat 实例中 webapps 之间的连接重置

java - 将 InputStream 转换为 byte[] 的最有效方法?

java - Maven 和可选的运行时依赖项

http - 眩晕 229 无法在 Windows 8 上运行

http - 保护 HTTP 引用

java - 我如何在 FreeMarker 模板中连接两个东西?