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

2022-09-02 21:26:37

假设我有:

@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")  

但它们不起作用...如果我不能,除了为每个参数值组合编写一个处理程序之外,还有什么解决方案?


答案 1

试试这个:

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

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

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

@RequestMapping(params = "action=nuovoprodotto")

参考:


更新:我的坏,正如您在高级@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);
}

答案 2

推荐