URL contoh:
../search/?attr1=value1&attr2=value2&attr4=value4
Saya tidak tahu nama attr1, att2, dan attr4.
Saya ingin dapat melakukan sesuatu seperti itu (atau serupa, tidak peduli, asalkan saya memiliki akses ke Peta nama parameter permintaan -> nilai:
@RequestMapping(value = "/search/{parameters}", method = RequestMethod.GET)
public void search(HttpServletRequest request,
@PathVariable Map<String,String> allRequestParams, ModelMap model)
throws Exception {//TODO: implement}
Bagaimana saya bisa mencapai ini dengan Spring MVC?
java
spring
spring-mvc
MDb
sumber
sumber
@RequestParam MultiValueMap<String, String>
import org.springframework.ui.ModelMap;
juga.ModelMap
tidak diperlukan untuk mendapatkan semua params permintaan sebagai peta; itu hanya detail khusus untuk kode OP.Edit
Telah ditunjukkan bahwa ada ( setidaknya pada 3.0 ) mekanisme Spring MVC murni dimana seseorang bisa mendapatkan data ini. Saya tidak akan menjelaskannya di sini, karena ini adalah jawaban dari pengguna lain. Lihat jawaban @ AdamGent untuk detailnya, dan jangan lupa untuk membatalkannya.
Dalam dokumentasi Spring 3.2 mekanisme ini disebutkan di
RequestMapping
halaman JavaDoc danRequestParam
halaman JavaDoc, tetapi sebelumnya, itu hanya disebutkan diRequestMapping
halaman. Dalam 2.5 dokumentasi tidak disebutkan mekanisme ini.Ini kemungkinan merupakan pendekatan yang disukai untuk sebagian besar pengembang karena menghilangkan (setidaknya ini) mengikat ke
HttpServletRequest
objek yang ditentukan oleh jar servlet-api./ Edit
Anda harus memiliki akses ke string kueri permintaan via
request.getQueryString()
.Selain getQueryString, parameter kueri juga dapat diambil dari request.getParameterMap () sebagai Peta.
sumber
@RequestParam
akan dengan senang hati mengambilMap
sebagai parameter (lihat jawaban saya).@RequestParam
padaMap<String,String>
untuk mengambil semua parameter string kueri. Dan tolong, jangan merasa begitu dibenci atas jawaban yang Anda lihat di sini ... mereka tidak yang buruk :) static.springsource.org/spring/docs/3.1.x/javadoc-api/org/...@RequestParam Map<>
jalan itu tidak dilakukan. Saya memiliki sedikit gangguan dalam banyak proyek modern yang saya lihat Spring MVC (semi 3.1 dan lebih tinggi) mereka akan menempatkan HttpServletRequest dan HttpServletResponse pada setiap metode. Dan sepertinya ini karena pengembang junior menggunakan StackOverflow dan google alih-alih melihat dokumen. Ini menyulitkan proyek Spring untuk beralih dari servlet api untuk mengucapkan Netty API. JAX-RS memiliki masalah penyalahgunaan yang serupa tetapi pada tingkat yang jauh lebih rendah.Objek HttpServletRequest menyediakan peta parameter sudah. Lihat request.getParameterMap () untuk detail lebih lanjut.
sumber
Anda cukup menggunakan ini:
Itu seharusnya bekerja dengan baik
sumber
Ini adalah contoh sederhana dari mendapatkan permintaan params di Peta.
Dalam hal ini, itu akan mengikat nilai studentName dan studentEmail dengan variabel nama dan email masing-masing.
sumber
Gunakan
org.springframework.web.context.request.WebRequest
sebagai parameter dalam metode controller Anda, itu menyediakan metodegetParameterMap()
, keuntungannya adalah Anda tidak mengencangkan aplikasi Anda ke Servlet API, WebRequest adalah contoh objek JavaEE Object Konteks.sumber
Ada dua antarmuka
org.springframework.web.context.request.WebRequest
org.springframework.web.context.request.NativeWebRequest
Mengizinkan akses parameter permintaan umum serta
request/session
akses atribut, tanpa ikatan dengan API Servlet / Portlet asli .Ex.:
PS Ada Documents tentang argumen yang dapat digunakan sebagai params Kontroler.
sumber
String[]
nilainya? Saya harus mengindeksnya ke 0 hanya untuk mendapatkan nilai.key=val1,val2
ataukey=val1&key=val2
(jika saya ingat dengan benar pegas mendukung kedua notasi ini) sehingga Anda akan mendapatkan array dengan 2 elemenSaya mungkin terlambat ke pesta, tetapi sesuai pemahaman saya, Anda mencari sesuatu seperti ini:
sumber
Semua params akan disimpan di
jsonObject
.sumber
Ada perbedaan mendasar antara parameter kueri dan parameter jalur. Bunyinya seperti ini:
www.your_domain?queryparam1=1&queryparam2=2
- parameter kueri.www.your_domain/path_param1/entity/path_param2
- parameter jalur.Apa yang saya temukan mengejutkan adalah bahwa di dunia Spring MVC banyak orang bingung satu sama lain. Sementara parameter kueri lebih seperti kriteria untuk pencarian, params jalur kemungkinan besar akan secara unik mengidentifikasi sumber daya. Karena itu, itu tidak berarti bahwa Anda tidak dapat memiliki beberapa parameter lintasan di URI Anda, karena struktur sumber daya dapat disarangkan. Sebagai contoh, katakanlah Anda membutuhkan sumber daya mobil spesifik dari orang tertentu:
www.my_site/customer/15/car/2
- Mencari mobil kedua dari pelanggan ke-15.Apa yang akan menjadi usecase untuk menempatkan semua parameter jalur ke peta? Parameter jalur tidak memiliki "kunci" ketika Anda melihat URI itu sendiri, kunci-kunci di dalam peta akan diambil dari penjelasan @ Pemetaan Anda, misalnya:
Dari HTTP / REST, parameter jalur perspektif tidak dapat diproyeksikan ke peta. Ini semua tentang fleksibilitas Spring dan keinginan mereka untuk mengakomodasi keinginan pengembang, menurut pendapat saya.
Saya tidak akan pernah menggunakan peta untuk parameter jalur, tetapi ini bisa sangat berguna untuk parameter kueri.
sumber