Saya mengirimkan beberapa parameter dari formulir dengan cara ini:
myparam[0] : 'myValue1'
myparam[1] : 'myValue2'
myparam[2] : 'myValue3'
otherParam : 'otherValue'
anotherParam : 'anotherValue'
...
Saya tahu saya bisa mendapatkan semua parameter dalam metode pengontrol dengan menambahkan parameter seperti
public String controllerMethod(@RequestParam Map<String, String> params){
....
}
Saya ingin mengikat parameter myParam [] (bukan yang lain) ke daftar atau larik (apa pun yang menjaga urutan indeks), jadi saya sudah mencoba dengan sintaks seperti:
public String controllerMethod(@RequestParam(value="myParam") List<String> myParams){
....
}
dan
public String controllerMethod(@RequestParam(value="myParam") String[] myParams){
....
}
tapi tidak satupun dari mereka mengikat myParams. Bahkan ketika saya menambahkan nilai ke peta, itu tidak dapat mengikat parameter:
public String controllerMethod(@RequestParam(value="myParam") Map<String, String> params){
....
}
Apakah ada sintaks untuk mengikat beberapa params ke daftar atau larik tanpa harus membuat objek sebagai @ModelAttribute dengan atribut daftar di dalamnya?
Terima kasih
HandlerMethodInvoker.resolveRequestParam
hanya mendapatkan nilai pertamamethod = RequestMethod.GET
ataumethod = RequestMethod.POST
? Jika.GET
@RequestParam List<String> groupVal
dipenuhi dari?groupVal=kkk,ccc,mmm
berhasil ( Spring Boot )Jawaban:
Array in
@RequestParam
digunakan untuk mengikat beberapa parameter dengan nama yang sama:Jika Anda perlu mengikat
@ModelAttribute
parameter indeks gaya, saya rasa Anda@ModelAttribute
tetap membutuhkannya .sumber
Atau Anda bisa melakukannya seperti itu:
Itu berfungsi misalnya untuk formulir seperti ini:
Ini adalah solusi paling sederhana :)
sumber
List<String>
melalui ini. Juga dimungkinkan untuk mendapatkan biji jawa sepertiList<MyBean>
Hanya melengkapi apa yang dikatakan Donal Fellows, Anda dapat menggunakan List dengan @RequestParam
Semoga membantu!
sumber
Berlangganan apa yang dikatakan basil dalam komentar untuk pertanyaan itu sendiri, jika
method = RequestMethod.GET
Anda bisa menggunakan@RequestParam List<String> groupVal
.Kemudian memanggil layanan dengan daftar params sesederhana:
sumber
Salah satu cara Anda bisa melakukannya (dengan cara hackish) adalah dengan membuat kelas pembungkus untuk
List
. Seperti ini:Kemudian tanda tangan metode pengontrol Anda akan terlihat seperti ini:
Tidak perlu menggunakan anotasi
@RequestParam
atau@ModelAttribute
jika nama koleksi yang Anda berikan dalam permintaan cocok dengan nama bidang koleksi kelas pembungkus, dalam contoh saya, parameter permintaan Anda akan terlihat seperti ini:sumber
Tidak jelas bagi saya bahwa meskipun Anda dapat menerima Collection sebagai parameter permintaan, tetapi di sisi konsumen Anda masih harus memasukkan item koleksi sebagai nilai yang dipisahkan koma .
Misalnya jika api sisi server terlihat seperti ini:
Meneruskan koleksi secara langsung ke RestTemplate sebagai RequestParam seperti di bawah ini akan mengakibatkan kerusakan data
Sebagai gantinya Anda bisa menggunakan
Contoh lengkapnya dapat ditemukan di sini , semoga bisa menyelamatkan seseorang dari sakit kepala :)
sumber
Ubah nilai bidang tersembunyi dengan kotak centang beralih seperti di bawah ini ...
HTML:
Naskah:
sumber