Musim Semi Anotasi @RequestParam

1. Ikhtisar

Dalam tutorial singkat ini, kita akan menjelajahi anotasi @RequestParam Spring dan atributnya.

Sederhananya, kita dapat menggunakan @RequestParam untuk mengekstrak parameter kueri, parameter formulir, dan bahkan file dari permintaan.

2. Pemetaan Sederhana

Katakanlah kita memiliki titik akhir / api / foos yang mengambil parameter kueri yang disebut id :

@GetMapping("/api/foos") @ResponseBody public String getFoos(@RequestParam String id) { return "ID: " + id; }

Dalam contoh ini, kami menggunakan @RequestParam untuk mengekstrak parameter kueri id .

Permintaan GET sederhana akan memanggil getFoos :

//localhost:8080/api/foos?id=abc ---- ID: abc

Selanjutnya, mari kita lihat atribut anotasi: name , value , required , dan defaultValue .

3. Menentukan Nama Parameter Permintaan

Pada contoh sebelumnya, nama variabel dan nama parameternya sama.

Terkadang kami ingin ini berbeda. Atau, jika kita tidak menggunakan Spring Boot, kita mungkin perlu melakukan konfigurasi waktu kompilasi khusus atau nama parameter tidak akan benar-benar ada di bytecode.

Untungnya, kami dapat mengkonfigurasi nama @RequestParam menggunakan atribut name :

@PostMapping("/api/foos") @ResponseBody public String addFoo(@RequestParam(name = "id") String fooId, @RequestParam String name) { return "ID: " + fooId + " Name: " + name; }

Kita juga bisa melakukan @RequestParam (value = “id”) atau hanya @RequestParam (“id”).

4. Parameter Permintaan Opsional

Parameter metode yang dianotasi dengan @RequestParam diperlukan secara default.

Ini berarti jika parameter tidak ada dalam permintaan, kita akan mendapatkan kesalahan:

GET /api/foos HTTP/1.1 ----- 400 Bad Request Required String parameter 'id' is not present

Kami dapat mengonfigurasi @RequestParam kami menjadi opsional, dengan atribut yang diperlukan :

@GetMapping("/api/foos") @ResponseBody public String getFoos(@RequestParam(required = false) String id) { return "ID: " + id; }

Dalam hal ini, keduanya:

//localhost:8080/api/foos?id=abc ---- ID: abc

dan

//localhost:8080/api/foos ---- ID: null

akan memanggil metode dengan benar.

Jika parameter tidak ditentukan, parameter metode terikat ke nol .

4.1. Menggunakan Java 8 Opsional

Sebagai alternatif, kita dapat membungkus parameter dalam Opsional :

@GetMapping("/api/foos") @ResponseBody public String getFoos(@RequestParam Optional id){ return "ID: " + id.orElseGet(() -> "not provided"); }

Dalam kasus ini, kami tidak perlu menentukan atribut yang diperlukan .

Dan nilai default akan digunakan jika parameter permintaan tidak disediakan:

//localhost:8080/api/foos ---- ID: not provided

5. Nilai Default untuk Parameter Permintaan

Kami juga dapat menyetel nilai default ke @RequestParam dengan menggunakan atribut defaultValue :

@GetMapping("/api/foos") @ResponseBody public String getFoos(@RequestParam(defaultValue = "test") String id) { return "ID: " + id; }

Ini seperti required = false, karena pengguna tidak lagi perlu memberikan parameter :

//localhost:8080/api/foos ---- ID: test

Meski, kami tetap oke untuk menyediakannya:

//localhost:8080/api/foos?id=abc ---- ID: abc

Perhatikan bahwa ketika kita menyetel atribut defaultValue , required memang disetel ke false .

6. Memetakan Semua Parameter

Kami juga dapat memiliki beberapa parameter tanpa menentukan nama atau hitungannya hanya dengan menggunakan Peta :

@PostMapping("/api/foos") @ResponseBody public String updateFoos(@RequestParam Map allParams) { return "Parameters are " + allParams.entrySet(); }

yang kemudian akan mencerminkan kembali parameter yang dikirim:

curl -X POST -F 'name=abc' -F 'id=123' //localhost:8080/api/foos ----- Parameters are {[name=abc], [id=123]}

7. Memetakan Parameter Multi-Nilai

Satu @RequestParam dapat memiliki beberapa nilai:

@GetMapping("/api/foos") @ResponseBody public String getFoos(@RequestParam List id) { return "IDs are " + id; }

Dan Spring MVC akan memetakan parameter id yang dipisahkan koma :

//localhost:8080/api/foos?id=1,2,3 ---- IDs are [1,2,3]

atau daftar parameter id terpisah :

//localhost:8080/api/foos?id=1&id=2 ---- IDs are [1,2]

8. Kesimpulan

Di artikel ini, kami mempelajari cara menggunakan @RequestParam.

Kode sumber lengkap untuk contoh dapat ditemukan di proyek GitHub.