SpringMVC RequestMapping для получения параметров
Как сделать RequestMapping для обработки параметров GET в url?
Например у меня есть этот url
http://localhost:8080/userGrid?_search=false&nd=1351972571018&rows=10&page=1&sidx=id&sord=desc
(от jqGrid)
как должен выглядеть мой RequestMapping? Я хочу получить параметры с помощью HttpReqest
попытался это:
@RequestMapping("/userGrid")
public @ResponseBody GridModel getUsersForGrid(HttpServletRequest request)
но это не работает.
6 ответов:
использовать @RequestParam в аргументах вашего метода, чтобы Spring мог связать их, также используйте @RequestMapping.параметры массив узкий метод, который будет использоваться весной. Пример кода:
@RequestMapping("/userGrid", params = {"_search", "nd", "rows", "page", "sidx", "sort"}) public @ResponseBody GridModel getUsersForGrid( @RequestParam(value = "_search") String search, @RequestParam(value = "nd") int nd, @RequestParam(value = "rows") int rows, @RequestParam(value = "page") int page, @RequestParam(value = "sidx") int sidx, @RequestParam(value = "sort") Sort sort) { // Stuff here }таким образом, Spring будет выполнять этот метод только в том случае, если все параметры присутствуют, спасая вас от проверки null и связанных с ней вещей.
Вы можете добавить
@RequestMappingвот так:@RequestMapping("/userGrid") public @ResponseBody GridModel getUsersForGrid( @RequestParam("_search") String search, @RequestParam String nd, @RequestParam int rows, @RequestParam int page, @RequestParam String sidx) @RequestParam String sord) {
Это позволит получить все параметры из запроса. Только для целей отладки:
@RequestMapping (value = "/promote", method = {RequestMethod.POST, RequestMethod.GET}) public ModelAndView renderPromotePage (HttpServletRequest request) { Map<String, String[]> parameters = request.getParameterMap(); for(String key : parameters.keySet()) { System.out.println(key); String[] vals = parameters.get(key); for(String val : vals) System.out.println(" -> " + val); } ModelAndView mv = new ModelAndView(); mv.setViewName("test"); return mv; }
Если вы хотите изменить свой uri, вы также можете использовать
PathVariable.@RequestMapping(value="/mapping/foo/{foo}/{bar}", method=RequestMethod.GET) public String process(@PathVariable String foo,@PathVariable String bar) { //Perform logic with foo and bar }NB: первый foo является частью пути, второй -
PathVariable
это работает в моем случае:
@RequestMapping(value = "/savedata", params = {"textArea", "localKey", "localFile"}) @ResponseBody public void saveData(@RequestParam(value = "textArea") String textArea, @RequestParam(value = "localKey") String localKey, @RequestParam(value = "localFile") String localFile) { }
вы должны написать своего рода шаблон в
@RequestMapping:http://localhost:8080/userGrid?_search=${search}&nd=${nd}&rows=${rows}&page=${page}&sidx=${sidx}&sord=${sord}теперь определите свой бизнес-метод следующим образом:
@RequestMapping("/userGrid?_search=${search}&nd=${nd}&rows=${rows}&page=${page}&sidx=${sidx}&sord=${sord}") public @ResponseBody GridModel getUsersForGrid( @RequestParam(value = "search") String search, @RequestParam(value = "nd") int nd, @RequestParam(value = "rows") int rows, @RequestParam(value = "page") int page, @RequestParam(value = "sidx") int sidx, @RequestParam(value = "sort") Sort sort) { ............... }Итак, рамки будут отображаться
${foo}соответствующего@RequestParam.поскольку сортировка может быть либо asc, либо desc, я бы определил ее как перечисление:
public enum Sort { asc, desc }весна имеет дело с перечислениями очень хорошо.
Comments