Comment faire le RequestMapping pour gérer les paramètres 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)
à quoi devrait ressembler mon RequestMapping? Je veux obtenir les paramètres en utilisant HttpReqest
J'ai essayé ceci:
@RequestMapping("/userGrid")
public @ResponseBody GridModel getUsersForGrid(HttpServletRequest request)
mais ça ne marche pas.
Utilisez @ RequestParam dans les arguments de votre 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") 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
}
De cette façon, Spring n’exécutera cette méthode que si TOUS LES PARAMÈTRES sont présents, ce qui vous évite toute vérification de la valeur NULL et les tâches connexes.
Vous pouvez ajouter @RequestMapping
comme ceci:
@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) {
Cela permettra d'obtenir TOUS les paramètres de la demande. À des fins de débogage uniquement:
@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;
}
Si vous voulez changer votre uri, vous pouvez aussi utiliser 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: Le premier toto 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") String textArea,
@RequestParam(value = "localKey") String localKey,
@RequestParam(value = "localFile") String 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 commerciale comme suit:
@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) {
...............
}
Le cadre mappera donc ${foo}
à @RequestParam
approprié.
Puisque sort peut être asc ou desc, je le définirais comme un enum:
public enum Sort {
asc, desc
}
Le printemps traite très bien des enums.