Spring @RequPP vs Anotasi @PVariable

1. Ikhtisar

Dalam tutorial ini cepat, kita akan mengeksplorasi perbedaan antara Spring @RequestParam dan @PathVariable penjelasan.

@RequestParam dan @PathVariable keduanya dapat digunakan untuk mengekstrak nilai dari URI permintaan, tetapi keduanya sedikit berbeda.

2. Parameter Kueri vs Jalur URI

Saat @RequestParam mengekstrak nilai dari string kueri, @PathVariables mengekstrak nilai dari jalur URI:

@GetMapping("/foos/{id}") @ResponseBody public String getFooById(@PathVariable String id) { return "ID: " + id; }

Kemudian, kita bisa memetakan berdasarkan jalur:

//localhost:8080/foos/abc ---- ID: abc

Dan untuk @RequestParam, itu akan menjadi:

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

Yang akan memberi kita respons yang sama, hanya URI yang berbeda:

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

3. Nilai Tersandi vs Nilai Tepat

Karena @PathVariable mengekstrak nilai dari jalur URI, ini tidak dienkode. Di sisi lain, @RequestParam adalah.

Menggunakan contoh sebelumnya, ab + c akan mengembalikan apa adanya:

//localhost:8080/foos/ab+c ---- ID: ab+c

Namun untuk permintaan @RequestParam , parameternya adalah URL yang didekodekan:

//localhost:8080/foos?id=ab+c ---- ID: ab c

4. Nilai Opsional

Baik @RequestParam dan @PathVariable bisa jadi opsional.

Kita dapat menjadikan @PathVariable opsional dengan menggunakan atribut yang diperlukan mulai dari Spring 4.3.3:

@GetMapping({"/myfoos/optional", "/myfoos/optional/{id}"}) @ResponseBody public String getFooByOptionalId(@PathVariable(required = false) String id){ return "ID: " + id; }

Yang, kemudian, kita dapat melakukan:

//localhost:8080/myfoos/optional/abc ---- ID: abc 

atau:

//localhost:8080/myfoos/optional ---- ID: null

Untuk @RequestParam , kita juga bisa menggunakan atribut yang dibutuhkan .

Perhatikan bahwa kita harus berhati-hati saat menjadikan @PathVariable opsional, untuk menghindari konflik di jalur.

5. Kesimpulan

Di artikel ini, kami mempelajari perbedaan antara @RequestParam dan @PathVariable .

Kode sumber lengkap untuk contoh dapat ditemukan di GitHub.