SpringMVC RequestMapping用于GET参数

Evg*_*rov 64 java spring spring-mvc

如何让RequestMapping处理url中的GET参数?例如,我有这个网址

http://localhost:8080/userGrid?_search=false&nd=1351972571018&rows=10&page=1&sidx=id&sord=desc
Run Code Online (Sandbox Code Playgroud)

(来自jqGrid)

我的RequestMapping应该怎么样?我想使用HttpReqest获取参数

试过这个:

@RequestMapping("/userGrid")
    public @ResponseBody GridModel getUsersForGrid(HttpServletRequest request)
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

Eld*_*ael 127

在方法参数中使用@RequestParam,以便Spring可以绑定它们,也可以使用@RequestMapping.params数组来缩小spring将使用的方法.示例代码:

@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
}
Run Code Online (Sandbox Code Playgroud)

这样,如果存在ALL PARAMETERS,Spring将只执行此方法,从而避免空检查和相关内容.

  • 如果我不是每次都想要所有这些,它们是可选的吗?另外,如果我有很多参数,怎么办?我可以创建一个带有params的类并将该类设置为@RequestParam吗?谢谢! (7认同)
  • 要在较新版本的Spring(4+)中使参数可选,请使用`required = false`和`Optional <T>`作为参数类型,例如`@RequestParam(value ="sort",required = false)可选<String> sort` (2认同)

Rei*_*eus 30

您可以这样添加@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) {
Run Code Online (Sandbox Code Playgroud)

  • 如果方法param和request param具有相同的名称,你也不需要`value ="myname"`.我赞成这个答案. (6认同)

Mir*_*ciu 13

这将从请求中获取所有参数.仅用于调试目的:

@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;
}
Run Code Online (Sandbox Code Playgroud)


Ama*_*ega 5

如果您愿意更改您的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
}
Run Code Online (Sandbox Code Playgroud)

注意:第一个foo是路径的一部分,第二个是PathVariable