Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取参数的SpringMVC请求映射_Java_Spring_Spring Mvc - Fatal编程技术网

Java 获取参数的SpringMVC请求映射

Java 获取参数的SpringMVC请求映射,java,spring,spring-mvc,Java,Spring,Spring Mvc,如何使RequestMapping处理url中的GET参数? 例如,我有这个url http://localhost:8080/userGrid?_search=false&nd=1351972571018&rows=10&page=1&sidx=id&sord=desc (来自jqGrid) 我的请求映射应该是什么样子?我想使用HttpReqest获取参数 我试过这个: @RequestMapping("/userGrid") public @

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

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

我的请求映射应该是什么样子?我想使用HttpReqest获取参数

我试过这个:

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

但是它不起作用。

您应该在
@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
}

Spring很好地处理enum

您可以像这样添加
@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) {
在方法参数中使用,以便Spring可以绑定它们,还可以使用数组缩小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
}

这样,只有当所有参数都存在时,Spring才会执行此方法,从而避免空值检查和相关内容。

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

@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;
}
@RequestMapping(value=“/promote”,method={RequestMethod.POST,RequestMethod.GET})
公共模型和视图呈现程序页面(HttpServletRequest){
映射参数=request.getParameterMap();
for(字符串键:parameters.keySet()){
系统输出打印项次(键);
字符串[]VAL=参数.get(键);
用于(字符串val:val)
System.out.println(“->”+val);
}
ModelAndView mv=新ModelAndView();
mv.setViewName(“测试”);
返回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) {
}

另外,如果方法参数和请求参数具有相同的名称,则不需要
value=“myname”
。不过我对这个答案投了更高的票。如果参数按顺序变化呢?说得好,@mael。我通常将SpringMVC用于Restful服务,其中参数被指定到URL本身中,并且顺序是预定义的。我现在学习了
params
属性。如果我不想每次都使用它们,它们可以是可选的吗?还有,如果我有很多情人呢?我可以用params创建一个类并将该类设置为@RequestParam吗?谢谢查看此帖子了解可选参数此功能正常吗?排序对象在URL中应该是什么样子?我尝试使用
?object[key]=value
格式,但在较新版本的Spring(4+)中使参数可选并不起作用,使用
required=false
optional
作为参数类型,例如
@RequestParam(value=“sort”,required=false)可选排序
是否也存在获取所有映射参数+可选未映射参数的可能性?例如,检测客户端是否输入了未使用的参数。因此,您可以为此记录一个警告?@Strinder(延迟响应,但此处仅供参考):如果您有方法参数
@RequestParam(defaultValue=“{}”)多值映射
,那么您将得到一个
映射
,其中每个值都是给定
键的
字符串
列表。然后,您可以对其进行迭代,以查看是否存在您无法识别的
键<代码>映射
也可以工作,如果您确定不会有任何重复的参数。