繁体   English   中英

模糊的映射错误: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.

下面是我的programController类

    @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方法会有问题。 在StackOverflow上有很多类似的问题,但是我找不到正确的答案。

因为您指定的是RequestMapping其他names ,而不是values 当前,这两种方法的value相同( "" -空),这是不允许的。 您的请求映射的URL部分应该在value指定,而不是@RequestMapping name属性。

尝试这个:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM