Как добавить объект в тело запроса через URL и класс HttpURLConnection - PullRequest
0 голосов
/ 18 сентября 2018

Я имею в виду этот вопрос, и у меня есть следующий фрагмент кода:

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",
 }

Как я могу отправить массив здесь, когда у меня есть ' passwordProfile ' в качестве объекта? Любая помощь будет оценена!

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Чтобы отправить «элементы» в тело запроса, вы можете сделать следующее:

объявить:

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");
0 голосов
/ 18 сентября 2018

для отправки объекта json, как указано в вашем вопросе, сначала вам нужно изменить тип контента, как показано ниже

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

затем, используя библиотеку Jackson 2, вы можете получить строковое значение json из любого объекта, который будет являться нашими почтовыми данными. например:

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

это все, и ваш код будет работать нормально.

...