หากฉันมีการแมปคำขอคล้ายกับสิ่งต่อไปนี้:
@RequestMapping(value = "/test", method = RequestMethod.POST)
@ResponseBody
public void test(@RequestParam(value = "i", defaultValue = "10") int i) {
}
จากนั้นเรียกคำขอนี้ด้วย:
http://example.com/test?i=
ฉันได้รับข้อความแสดงข้อผิดพลาด
ไม่สามารถแปลงค่าของประเภท 'java.lang.String' เป็นประเภท 'int'; ข้อยกเว้นที่ซ้อนกันคือ java.lang.NumberFormatException: สำหรับสตริงอินพุต: "" '
ฉันสามารถแก้ปัญหานี้ได้โดยการหยุดไคลเอ็นต์ javascript ไม่ให้ส่งพารามิเตอร์ว่างหรือโดยการยอมรับค่าสตริงและแยกวิเคราะห์เฉพาะในกรณีที่ไม่พบว่าว่างเปล่า
อัปเดต : สปริงรุ่นที่ใหม่กว่าตอนนี้ใช้พฤติกรรมที่ต้องการตั้งแต่แรก
ฉันเพิ่งทดสอบสิ่งนี้ในฤดูใบไม้ผลิ 4.3.5 และพบว่าในความเป็นจริงแล้วพฤติกรรมจะเปลี่ยนค่าว่างเป็นค่าเริ่มต้นโดยไม่ต้องเพิ่ม a NumberFormatException
ดังนั้น การทำแผนที่เดิมของฉันใช้งานได้ดี
ฉันไม่แน่ใจว่าสปริงนี้มีการเปลี่ยนแปลงพฤติกรรมรุ่นใด
String
พิมพ์โดยบังเอิญ user902383 ถูกต้องแม้ว่าสำหรับค่าจำนวนเต็มฉันต้องการให้ค่า null / ว่างใช้ defaultValue แทน