SpringMVC RequestMapping pour les parameters GET

Comment faire le RequestMapping pour gérer les parameters GET dans l’URL? Par exemple, j’ai cette URL

http://localhost:8080/userGrid?_search=false&nd=1351972571018&rows=10&page=1&sidx=id&sord=desc 

(de jqGrid)

Comment devrait ressembler mon RequestMapping? Je veux obtenir les parameters en utilisant HttpReqest

J’ai essayé ceci:

 @RequestMapping("/userGrid") public @ResponseBody GridModel getUsersForGrid(HttpServletRequest request) 

mais ça ne marche pas.

Utilisez @RequestParam dans vos arguments de méthode pour que Spring puisse les lier, utilisez également le tableau @ RequestMapping.params pour affiner la méthode qui sera utilisée par Spring. Exemple de code:

 @RequestMapping("/userGrid", params = {"_search", "nd", "rows", "page", "sidx", "sort"}) public @ResponseBody GridModel getUsersForGrid( @RequestParam(value = "_search") Ssortingng 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 } 

De cette façon, Spring n’exécutera cette méthode que si TOUS LES PARAMETRES sont présents, ce qui vous évite les vérifications nulles et les éléments associés.

Vous pouvez append @RequestMapping comme ceci:

 @RequestMapping("/userGrid") public @ResponseBody GridModel getUsersForGrid( @RequestParam("_search") Ssortingng search, @RequestParam Ssortingng nd, @RequestParam int rows, @RequestParam int page, @RequestParam Ssortingng sidx) @RequestParam Ssortingng sord) { 

Cela va obtenir tous les parameters de la demande. À des fins de débogage uniquement:

 @RequestMapping (value = "/promote", method = {RequestMethod.POST, RequestMethod.GET}) public ModelAndView renderPromotePage (HttpServletRequest request) { Map parameters = request.getParameterMap(); for(Ssortingng key : parameters.keySet()) { System.out.println(key); Ssortingng[] vals = parameters.get(key); for(Ssortingng val : vals) System.out.println(" -> " + val); } ModelAndView mv = new ModelAndView(); mv.setViewName("test"); return mv; } 

Si vous souhaitez modifier votre uri, vous pouvez également utiliser PathVariable .

 @RequestMapping(value="/mapping/foo/{foo}/{bar}", method=RequestMethod.GET) public Ssortingng process(@PathVariable Ssortingng foo,@PathVariable Ssortingng bar) { //Perform logic with foo and bar } 

NB: Le premier foo fait partie du chemin, le second est le PathVariable

Cela fonctionne dans mon cas:

 @RequestMapping(value = "/savedata", params = {"textArea", "localKey", "localFile"}) @ResponseBody public void saveData(@RequestParam(value = "textArea") Ssortingng textArea, @RequestParam(value = "localKey") Ssortingng localKey, @RequestParam(value = "localFile") Ssortingng localFile) { } 

Vous devriez écrire une sorte de modèle dans le @RequestMapping :

 http://localhost:8080/userGrid?_search=${search}&nd=${nd}&rows=${rows}&page=${page}&sidx=${sidx}&sord=${sord} 

Définissez maintenant votre méthode métier comme suit:

 @RequestMapping("/userGrid?_search=${search}&nd=${nd}&rows=${rows}&page=${page}&sidx=${sidx}&sord=${sord}") public @ResponseBody GridModel getUsersForGrid( @RequestParam(value = "search") Ssortingng 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) { ............... } 

Ainsi, framework @RequestParam ${foo} à @RequestParam approprié.

Puisque le sorting peut être soit asc soit desc, je le définirais comme un enum:

 public enum Sort { asc, desc } 

Le spring traite très bien des énumérations.