jika saya memiliki pemetaan permintaan yang mirip dengan berikut ini:
@RequestMapping(value = "/test", method = RequestMethod.POST)
@ResponseBody
public void test(@RequestParam(value = "i", defaultValue = "10") int i) {
}
Dan kemudian panggil permintaan ini dengan:
http://example.com/test?i=
Saya mendapatkan pesan kesalahan
Gagal mengonversi nilai tipe 'java.lang.String' ke tipe 'int'; pengecualian bersarang adalah java.lang.NumberFormatException: Untuk input string: "" '
Saya dapat menyelesaikan ini dengan menghentikan klien javascript agar tidak mengirimkan parameter kosong, atau dengan menerima nilai string dan hanya mem-parsing jika tidak ditemukan kosong.
PEMBARUAN : Versi pegas yang lebih baru sekarang menerapkan perilaku yang awalnya diinginkan.
Saya baru saja menguji ini di musim semi 4.3.5 dan telah menemukan bahwa perilaku sekarang sebenarnya akan mengubah nilai nol menjadi nilai default tanpa menaikkan NumberFormatException
, jadi; pemetaan asli saya sekarang berfungsi dengan baik.
Saya tidak yakin versi musim semi yang mana perubahan perilaku ini dibuat.
sumber
String
tipe tidak sengaja diberikan . user902383, itu benar, meskipun untuk nilai integer saya lebih suka nilai null / kosong akan menggunakan defaultValue sebagai gantinya.Jawaban:
Anda dapat mengubah jenis @RequestParam menjadi Integer dan membuatnya tidak diperlukan. Ini akan memungkinkan permintaan Anda berhasil, tetapi kemudian akan menjadi nol. Anda dapat secara eksplisit mengaturnya ke nilai default Anda di metode pengontrol:
Saya telah menghapus defaultValue dari contoh di atas, tetapi Anda mungkin ingin memasukkannya jika Anda ingin menerima permintaan yang tidak disetel sama sekali:
sumber
Anda dapat mempertahankan tipe primitif dengan menyetel nilai default, dalam kasus Anda cukup tambahkan properti "required = false" :
PS Halaman ini dari dokumentasi Spring mungkin berguna: Annotation Type RequestParam
sumber
/test?i=
dan karenai
kosong memiliki nilai default.defaultValue
disediakan,required == false
secara implisitdefaultValue
tidak akan berpengaruh.Anda dapat mengatur RequestParam, menggunakan integer kelas generik alih-alih int, ini akan menyelesaikan masalah Anda.
sumber
Anda juga dapat melakukan sesuatu seperti ini -
sumber
Ini dianggap bug pada 2013: https://jira.spring.io/browse/SPR-10180
dan telah diperbaiki dengan versi 3.2.2. Masalah seharusnya tidak terjadi di versi apa pun setelah itu dan kode Anda seharusnya berfungsi dengan baik.
sumber