代码之家  ›  专栏  ›  技术社区  ›  Amit Gawali

如何通过url和httpurlConnection类在请求体中添加对象

  •  1
  • Amit Gawali  · 技术社区  · 7 年前

    我指的是 this 问题和我有以下代码:

    String urlParameters  = "param1=a&param2=b&param3=c";
    byte[] postData       = urlParameters.getBytes( StandardCharsets.UTF_8 );
    int    postDataLength = postData.length;
    String request        = "http://example.com/index.php";
    URL    url            = new URL( request );
    HttpURLConnection conn= (HttpURLConnection) url.openConnection();           
    conn.setDoOutput( true );
    conn.setInstanceFollowRedirects( false );
    conn.setRequestMethod( "POST" );
    conn.setRequestProperty( "Content-Type", "application/x-www-form-urlencoded"); 
    conn.setRequestProperty( "charset", "utf-8");
    conn.setRequestProperty( "Content-Length", Integer.toString( postDataLength ));
    conn.setUseCaches( false );
    try( DataOutputStream wr = new DataOutputStream( conn.getOutputStream())) {
       wr.write( postData );
    }
    

    但我想在请求主体中添加属性数组,因此请求数据如下所示:

    {
      "accountEnabled": true,
      "city": "Delhi",
      "country": "India",
      "department": "Human Resources",
      "displayName": "Adam G",
      "passwordProfile": {
        "password": "Test1234",
        "forceChangePasswordNextSignIn": false
      },
      "officeLocation": "131/1105",
      "postalCode": "98052",
      "preferredLanguage": "en-US",
      "state": "MH",
     }
    

    我怎么能像现在这样在这里发送数组? 密码配置文件 '作为对象? 任何帮助都将不胜感激!

    2 回复  |  直到 7 年前
        1
  •  1
  •   Ganesh Toni    7 年前

    要首先发送问题中提到的JSON对象,您需要如下更改内容类型

    conn.setRequestProperty("Content-Type","application/json");
    

    然后使用Jackson2库,您可以从任何对象中获得JSON字符串值,这些对象将是我们的post数据。例如:

    ObjectMapper mapper = new ObjectMapper();
    byte[] postData       = mapper.writeValueAsString(staff).getBytes( StandardCharsets.UTF_8 );
    

    仅此而已,您的代码将正常工作。

        2
  •  0
  •   Alex Frignani    7 年前

    要将“项目”发送到请求正文中,可以执行以下操作:

    声明:

    String json = "{\"accountEnabled\": true, \"city\": \"Delhi\",..................";
    

    然后

    URL obj = new URL(url);
    HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
    con.setRequestMethod("POST");
    con.setRequestProperty("Content-Type", "application/json");
    OutputStream os = con.getOutputStream();
    os.write(json.getBytes());
    

    在这种情况下,您发送的是JSON,因此重要的是:

    con.setRequestProperty("Content-Type", "application/json");