Membuat Permintaan POST JSON Dengan HttpURLConnection

1. Gambaran keseluruhan

Dalam tutorial ini, kami akan menunjukkan cara membuat permintaan JSON POST menggunakan HttpURLConnection .

2. Membina Permintaan POST JSON dengan HttpURLConnection

2.1. Buat Objek URL

Mari buat objek URL dengan rentetan URI sasaran yang menerima data JSON melalui kaedah HTTP POST:

URL url = new URL ("//reqres.in/api/users");

2.2. Buka Sambungan

Dari objek URL di atas , kita boleh menggunakan kaedah openConnection untuk mendapatkan objek HttpURLConnection .

Kami tidak dapat mewujudkan HttpURLConnection secara langsung, kerana kelas abstrak:

HttpURLConnection con = (HttpURLConnection)url.openConnection();

2.3. Tetapkan Kaedah Permintaan

Untuk menghantar permintaan POST, kita harus menetapkan sifat kaedah permintaan ke POST:

con.setRequestMethod("POST");

2.4. Tetapkan Parameter Header Jenis Kandungan Permintaan

Tetapkan header permintaan "content-type" ke "application / json" untuk mengirim konten permintaan dalam bentuk JSON. Parameter ini harus ditetapkan untuk mengirim badan permintaan dalam format JSON.

Gagal melakukannya, pelayan mengembalikan kod status HTTP "permintaan 400-buruk".

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

Juga, perhatikan bahawa kami telah menyebut pengekodan charset bersama dengan jenis kandungan. Ini berguna sekiranya pengekodan kandungan permintaan berbeza dari pengekodan UTF-8, yang merupakan pengekodan lalai.

2.5. Tetapkan Jenis Format Respons

Tetapkan header permintaan "Terima" ke "application / json" untuk membaca respons dalam format yang diinginkan:

con.setRequestProperty("Accept", "application/json");

2.6. Pastikan Sambungan Akan Digunakan untuk Menghantar Kandungan

Untuk menghantar kandungan permintaan, mari aktifkan sifat doOutput objek URLConnection menjadi benar .

Jika tidak, kami tidak dapat menulis kandungan ke aliran output sambungan:

con.setDoOutput(true);

2.7. Buat Badan Permintaan

Setelah membuat JSON String tersuai:

String jsonInputString = "{"name": "Upendra", "job": "Programmer"}";

Kita perlu menulisnya:

try(OutputStream os = con.getOutputStream()) { byte[] input = jsonInputString.getBytes("utf-8"); os.write(input, 0, input.length); }

2.8. Baca Respons dari Aliran Input

Dapatkan aliran input untuk membaca kandungan respons. Ingatlah untuk menggunakan sumber daya cuba untuk menutup aliran tindak balas secara automatik.

Baca keseluruhan kandungan respons, dan cetak rentetan respons terakhir:

try(BufferedReader br = new BufferedReader( new InputStreamReader(con.getInputStream(), "utf-8"))) { StringBuilder response = new StringBuilder(); String responseLine = null; while ((responseLine = br.readLine()) != null) { response.append(responseLine.trim()); } System.out.println(response.toString()); }

Sekiranya respons dalam format JSON, gunakan penghurai JSON pihak ketiga seperti perpustakaan Jackson , Gson , atau org.json untuk menguraikan respons.

3. Kesimpulannya

Dalam artikel ini, kami melihat cara membuat permintaan POST dengan badan kandungan JSON menggunakan HttpURLConnection .

Seperti biasa, coretan kod yang berkaitan boleh didapati di GitHub