Ambiguous mapping error : Spring Controller

Ambiguous mapping error : Spring Controller

部署代码时出现错误

Caused by: java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'programController' bean method
public java.lang.String com.quizapp.beans.controller.panal.ProgramController.editProgram(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
to {[],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}: There is already 'programController' bean method
public java.lang.String com.quizapp.beans.controller.panal.ProgramController.setupProgram(javax.servlet.http.HttpSession,org.springframework.ui.Model) mapped.

下面是我的programControllerclass

    @Controller
    public class ProgramController {

    @RequestMapping(name = "/editProgram", method = RequestMethod.GET)
    public String editProgram(HttpServletRequest request, HttpServletResponse response) {

        if (request.getSession().getAttribute(Constants.LOGGED_IN_USER) != null) {
            ProgramEntity program = new ProgramEntity();
            if (request.getParameter("id") == null) {// create
                program.setType("create");
            } else {// edit
                program.setType("edit");
                program.setCode(request.getParameter("id"));

            }
            request.setAttribute("programBean", program);
            return "editProgram";

        } else {
            return "redirect:/login";
        }
    }

    @RequestMapping(name = "/program", method = RequestMethod.GET)
    public String setupProgram(HttpSession session, Model model) {
        if (session.getAttribute(Constants.LOGGED_IN_USER) != null) {
            model.addAttribute("programBean", new ProgramEntity());
            // if (request.getSession().getAttribute(Constants.LOGGED_IN_USER) != null) {
            // request.setAttribute("programBean", new ProgramEntity());
            return "viewProgram";
        } else {
            return "redirect:/login";
        }
    }
}

当我将方法 editProgram 设为 POST 时,它会完美部署。 为什么添加两个 GET 方法有问题。 Whosebug 上有很多类似的问题,但我找不到正确的答案。

因为您指定了不同的 names of RequestMapping and not values. Currently, value of both the methods are same ("" - empty) which is not allowed. Your URL part of request mapping should be specified in value and not name attribute of @RequestMapping

试试这个:

@Controller
public class ProgramController {

@RequestMapping(value = "/editProgram", method = RequestMethod.GET)
public String editProgram(HttpServletRequest request, HttpServletResponse response) {

    if (request.getSession().getAttribute(Constants.LOGGED_IN_USER) != null) {
        ProgramEntity program = new ProgramEntity();
        if (request.getParameter("id") == null) {// create
            program.setType("create");
        } else {// edit
            program.setType("edit");
            program.setCode(request.getParameter("id"));

        }
        request.setAttribute("programBean", program);
        return "editProgram";

    } else {
        return "redirect:/login";
    }
}

@RequestMapping(value= "/program", method = RequestMethod.GET)
public String setupProgram(HttpSession session, Model model) {
    if (session.getAttribute(Constants.LOGGED_IN_USER) != null) {
        model.addAttribute("programBean", new ProgramEntity());
        // if (request.getSession().getAttribute(Constants.LOGGED_IN_USER) != null) {
        // request.setAttribute("programBean", new ProgramEntity());
        return "viewProgram";
    } else {
        return "redirect:/login";
    }
}
}