Як ви отримуєте параметр url із відображенням контролера пружини


98

Це питання здається дріб’язковим, але я не можу змусити його працювати належним чином. Я викликаю своє відображення контролера 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".
}

Відповіді:


159

Ви повинні використовувати @RequestParamзамість @ModelAttribute, наприклад,

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

Ви навіть можете зовсім пропустити @RequestParam, якщо ви вирішите, і Весна припустить, що це саме:

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

Якщо хтось інший також шукає офіційну документацію @RequestParam, ось вона: docs.spring.io/spring/docs/current/javadoc-api/org/…
tobias

22

У вас є багато варіантів для використання @RequestParamз додатковими необов’язковими елементами, наприклад

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

Якщо ви не ставите required = false- параметр буде потрібен за замовчуванням.

defaultValue = "someValue" - значення за замовчуванням, яке використовується як резервне, коли параметр запиту не вказаний або має порожнє значення.

Якщо параметри запиту та методу однакові - вам це не потрібно value = "someAttr"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.