2015-05-02 17 views
0

У меня есть форма, которая когда-то представленные запросы посыла, как следующийMatch requestmapping старых URLs стиле

Форма

 <form:form action="/edit" modelAttribute="edit" role="form" 
     method="GET"> 

Спросы

/edit?param1=1&param2=&param3= 
/edit?param1=1&param2=this & that$param3= 
/edit?param1=1&param2=2&param3=3 

я делаю следующим образом, но это не работает

@Controller 
@RequestMapping("edit") 
public class Edit{ 
    .... 
    @RequestMapping(value = "?param1={p1}&param2=&param3=", method = RequestMethod.GET) 

* Пожалуйста, обратите внимание, что имена параметров могут включать &

+0

это может быть из какая-то помощь вам http://stackoverflow.com/questions/13213061/springmvc-requestmapping-for-get-parameters – Vihar

ответ

0

Вы можете получить большую гибкость, добавив параметр @RequestParam Map<String, String> all, например.

@RequestMapping(@RequestParam Map<String, String> all, method = RequestMethod.GET) 

таким образом все ваши параметры будут привязаны к карте all, где ключ будет название вашего параметра и значения будет значением паров


В качестве альтернативы, вы можете добавить бэк-бланк формы, особенно если у вас уже есть modelAttribute=edit например

@RequestMapping(FormBean edit, method = RequestMethod.GET) 

В вашей FormBean вы можете перечислить все возможные имена параметров, как свойства, и они будут получать должным образом связаны, например,

public class FormBean { 
    private String param1; 

    public String getParam1() { 
     return param1; 
    } 

    public void setParam1(String param1) { 
     this.param1 = param1; 
    } 
} 

Update после комментария

вы также можете перечислить все возможные параметры, и помечать их как required=false, например,

@RequestMapping(@RequestParam(required = false, value = "param1") String param, @RequestParam(required = false, value = "param2") String param,method = RequestMethod.GET) 

Примечание одна вещь, сервер всегда будет использовать существование & полукокса в строке запроса в качестве параметра разделителя, поэтому вы не можете иметь его в качестве имени параметра

+0

спасибо, означает ли это, что у меня будет только один метод и нужно иметь, если условие/карта содержит функцию узнать, какие из них пройдены? Невозможно ли иметь отдельный метод для каждого формата запроса? – Jack

+0

Да, вам придется пройти через список карт. Первоначально я думал, что вы ищете способ сопоставить динамический набор параметров, но для каждого запроса можно иметь отдельный метод, просто перечислите параметр в '@ RequestParam' и установите соответствующий флажок' required', Я обновил ответ на примере –