Spring 3 MVC - Сопоставить параметры запроса с префиксом для одного компонента - PullRequest
9 голосов
/ 24 октября 2011

У меня есть следующий запрос GET:

/api/search?filter.operation=Ping&filter.namespace=

Обратите внимание, что имена параметров включают префикс ( фильтр. операция, фильтр. namespace).

Затем у меня есть следующий компонент, который я хочу использовать для получения этих параметров:

class MessageSearchFilter {
    String operation;
    String namespace;
    ...
}

И метод обработчика имеет следующую сигнатуру:

public @ResponseBody String searchMessages(MessageSearchFilter filter, ...);

Однако это не сработает, так как Spring MVC ожидает, что атрибуты 'operation' и 'namespace' будут иметь такие же имена.Это сработает, если я изменю свой запрос на использование 'operation' и 'namespace' (без префикса 'filter.').

Можно ли как-то сказать Spring, чтобы ожидать, что параметры будут иметь префикс «filter»??

Дополнительный вопрос, связанный с этим, что произойдет, если у меня будет сигнатура метода с несколькими объектами формы со встречными именами свойств?

Ответы [ 2 ]

1 голос
/ 09 декабря 2011

Добавление к вашему контроллеру метода

@Override
protected String getFieldBindingPrefix() {
    return "filter.";
}

должен сделать работу.

0 голосов
/ 24 октября 2011

Вы должны иметь возможность отображать входящие параметры строки запроса, используя @RequestParam, и вы можете полностью квалифицировать их:

//Your @RequestMapping here...
public @ResponseBody String searchMessages(
  @Requestparam("filter.operation") String filterOperation,
  @RequestParam("filter.namespace") String filterNamespace) {
    MessageSearchFilter messageSearchFilter = new MessageSearchFilter();
    messageSearchFilter.operation = filterOperation;
    messageSearchFilter.namespace = filterNamespace;
    //do your thing here...
}

Вы также заметите, что теперь вы сможете добавлять квалификаторы для других объектов с конфликтами имен свойств.

...