คุณจะรับพารามิเตอร์ url ด้วยการแม็ปตัวควบคุมสปริงได้อย่างไร


102

ปัญหานี้ดูเหมือนจะไม่สำคัญ แต่ฉันไม่สามารถทำให้มันทำงานได้อย่างถูกต้อง ฉันกำลังเรียกการแมปคอนโทรลเลอร์ Spring ด้วย jquery ajax ค่าสำหรับ someAttr เป็นสตริงว่างเสมอโดยไม่คำนึงถึงค่าใน url โปรดช่วยฉันระบุสาเหตุ

-URL เรียกว่า

http://localhost:8080/sitename/controllerLevelMapping/1?someAttr=6

- ควบคุมการทำแผนที่

@RequestMapping(value={"/{someID}"}, method=RequestMethod.GET)
public @ResponseBody int getAttr(@PathVariable(value="someID") final String id, 
        @ModelAttribute(value="someAttr") String someAttr) {
    //I hit some code here but the value for the ModelAttribute 'someAttr' is empty string.  The value for id is correctly set to "1".
}

คำตอบ:


167

คุณควรใช้@RequestParamแทน@ModelAttributeเช่น

@RequestMapping("/{someID}")
public @ResponseBody int getAttr(@PathVariable(value="someID") String id, 
                                 @RequestParam String someAttr) {
}

คุณสามารถละเว้น@RequestParamทั้งหมดได้หากคุณเลือกและ Spring จะถือว่านั่นคือสิ่งที่:

@RequestMapping("/{someID}")
public @ResponseBody int getAttr(@PathVariable(value="someID") String id, 
                                 String someAttr) {
}

ในกรณีที่ใครก็ตามกำลังมองหาเอกสารอย่างเป็นทางการ@RequestParamโปรดดูที่docs.spring.io/spring/docs/current/javadoc-api/org/…
tobias

23

คุณมีตัวแปรมากมายสำหรับใช้@RequestParamกับองค์ประกอบเสริมเพิ่มเติมเช่น

@RequestParam(required = false, defaultValue = "someValue", value="someAttr") String someAttr

หากคุณไม่ใส่required = falseพารามิเตอร์จะต้องเป็นค่าเริ่มต้น

defaultValue = "someValue" - ค่าเริ่มต้นที่จะใช้เป็นทางเลือกเมื่อไม่ได้ระบุพารามิเตอร์การร้องขอหรือมีค่าว่างเปล่า

หากพารามิเตอร์การร้องขอและวิธีการเหมือนกันคุณไม่จำเป็นต้องใช้ value = "someAttr"

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.