如果两个控制器具有相同的RequestMapping路径值,如何指定控制器名称?

时间:2016-09-08 08:49:26

标签: spring jsp jstl jsp-tags spring-4

有2个控制器具有相同的@RequestMapping值:

package com.ambre.hib.controller;
@Controller
public class AppointmentsController {
    @RequestMapping(value = "/new", method = RequestMethod.GET)
    public AppointmentForm getNewForm() {
        return new AppointmentForm();
    }
}

package com.ambre.hib.controller;
@Controller
public class ClientsController {
    @RequestMapping(value = "/new", method = RequestMethod.GET)
    public ClientForm getNewForm() {
        return new ClientForm();
    }
}

因此2个控制器具有相同的“/ new”动作。

现在从jsp页面我想要定位到第二个控制器的“/ new”动作的链接:<a href="<c:url value='/new' />"><img src="resources/images/plus.png" /></a>

这篇文章很模糊,因为Spring不知道要看哪个控制器!那么如何在链接目标中指定控制器名称?

2 个答案:

答案 0 :(得分:2)

使用相同的@RequestMapping不可能有两个或更多控制器方法。调度员不知道如何打电话。

您可以为每个控制器设置基本请求映射:

package com.ambre.hib.controller;
@Controller
@RequestMapping("/appointments")
public class AppointmentsController {
    @RequestMapping(value = "/new", method = RequestMethod.GET)
    public AppointmentForm getNewForm() {
        return new AppointmentForm();
    }
}

package com.ambre.hib.controller;
@Controller
@RequestMapping("/clients")
public class ClientsController {
    @RequestMapping(value = "/new", method = RequestMethod.GET)
    public ClientForm getNewForm() {
        return new ClientForm();
    }
}

如果是这样,第一个控制器的调用方式为<a href="<c:url value='/appointments/new' />"> 第二次{/ 1}}

答案 1 :(得分:-2)

您需要使用“params”选项缩小请求范围。例如

@Controller
public class HelloWorldController {
    @RequestMapping(value="/fetch", params = {"id=100"})
    public String getInfo1(@RequestParam("id") String id) {
        System.out.println("Inside getInfo1");
        return "success";
    }
    @RequestMapping(value="/fetch", params = {"id=200"})
    public String getInfo2(@RequestParam("id") String id) {
        System.out.println("Inside getInfo2");
        return "success";
    }
}   

当您访问URL / fetch?id = 100时,将调用方法getInfo1()。当您访问URL / fetch?id = 200时,调用方法getInfo2(),当您访问/ fetch?id = 300时,将收到HTTP状态404。在这种情况下,“id”参数只是用于将请求缩小到控制器中首选方法的另一个参数。