如何在Spring MVC中的相同@RequestMapping中映射参数的不同值?

got*_*ch4 15 java spring spring-mvc

假设我有:

@RequestMapping(params = "action=nuovoprodotto")    
    public ModelAndView nuovoProdotto(
            @RequestParam(value = "page", required = false, defaultValue = "-1") int page,
            @RequestParam(value = "action") String action,
            @ModelAttribute Prodotto prod, HttpSession session)
            throws Exception {
Run Code Online (Sandbox Code Playgroud)

是否可以将此请求映射为两个或三个"action"参数值?

我试过很多方法

@RequestMapping(params = "action=nuovoprodotto, action=salvaprodotto")  
Run Code Online (Sandbox Code Playgroud)

要么

@RequestMapping(params = "action=nuovoprodotto|salvaprodotto")  
Run Code Online (Sandbox Code Playgroud)

但它们不起作用...如果我不能解决什么问题,那么除了为每个参数值组合编写处理程序外?

Sea*_*oyd 21

试试这个:

@RequestMapping(params = {"action=nuovoprodotto","action=salvaprodotto"})
Run Code Online (Sandbox Code Playgroud)

params属性实际上是类型String[],但注释允许您编写String一个单元素String[],因此这两个是等效的:

@RequestMapping(params = {"action=nuovoprodotto"})
Run Code Online (Sandbox Code Playgroud)

@RequestMapping(params = "action=nuovoprodotto")
Run Code Online (Sandbox Code Playgroud)

参考:


更新:我的不好,正如你可以在高级@RequestMapping选项一节中看到的那样,多个参数组合使用和,而不是或者,因此它不能像上面指定的那样工作.

所以我要说你要做的是创建一个具有几乎相同签名的别名方法:

@RequestMapping(params = "action=nuovoprodotto")    
public ModelAndView nuovoProdotto(
        @RequestParam(value = "page", required = false, defaultValue = "-1") int page,
        @RequestParam(value = "action") String action,
        @ModelAttribute Prodotto prod, HttpSession session)
        throws Exception {
        // some stuff here
}

@RequestMapping(params = "action=salvaprodotto")    
public ModelAndView salvaProdotto(
        @RequestParam(value = "page", required = false, defaultValue = "-1") int page,
        @RequestParam(value = "action") String action,
        @ModelAttribute Prodotto prod, HttpSession session)
        throws Exception {

        return nuovoProdotto(page, action, prod, session);
}
Run Code Online (Sandbox Code Playgroud)