如何在Spring MVC的同一@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 {

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

我尝试了很多方法

@RequestMapping(params = "action=nuovoprodotto, action=salvaprodotto")

要么

@RequestMapping(params = "action=nuovoprodotto|salvaprodotto")

但是它们不起作用…如果我不能解决方案,那么边为每个参数值组合编写处理程序吗?


问题答案:

尝试这个:

@RequestMapping(params = {"action=nuovoprodotto","action=salvaprodotto"})

params属性实际上是type String[],但是注释使您可以String代替单个元素编写一个String[],因此这两个是等效的:

@RequestMapping(params = {"action=nuovoprodotto"})

@RequestMapping(params = "action=nuovoprodotto")

参考:


更新:不好,您可以在“
高级@RequestMapping选项
”部分中阅读,多个参数使用和而不是or进行组合,因此它无法按上面指定的方式工作。

因此,我想说的是您要做的是创建一个具有几乎相同签名的别名方法:

@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);
}