JSP 表单标签动作属性 URI Spring MVC

JSP form tag action attribute URI Spring MVC

我有这样的控制器

   @Controller
    @RequestMapping("/pizza")
    public class PizzaController {

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String viewPizzas(Model model) {
        model.addAttribute("pizzas",
                pizzaService.getAllPizzas());
        return "pizzas";
    }
     @RequestMapping(value = "/create", method = RequestMethod.GET)
        public String create() {
            return "newpizza";
        }

        @RequestMapping(value = "/addnew", method = RequestMethod.POST)
        public String addNewPizza(@ModelAttribute Pizza newPizza) {
            pizzaService.addPizza(newPizza);
            return "redirect:";
        }

        }

        @RequestMapping(value = "/edit", method = RequestMethod.GET)
        public String edit(@RequestParam("pizzaid") Long id, 
                Model model) {
            if (id<=0) throw new IllegalArgumentException("ID<0");
            Pizza pizza = pizzaService.getPizzaById(id);
            if (pizza == null) 
                throw new NotFoundPizzaException("Pizza id" + id + " not found" );
            model.addAttribute("pizza", pizza);
            return "newpizza";
        }
    }

和JSP的:pizzas.jsp

    <body>
        <table border="1">
           ......................
                        <form method="get" action="edit" >
                            <input type="hidden" name="pizzaid" value="${pizza.id}" />
                            <input type="submit" value="Edit" />
                        </form>        

        </table>
        <a href="create"> Create new pizza </a> <br/>
    </body>

和newpizza.jsp

<body>
        <form action="addnew" method="post">
                   <input type="hidden" name="id" value="${pizza.id}"/>
            Name : <input type="text" name="name" value="${pizza.name}"/></br>
            Type : <input type="text" name="type" value="${pizza.type}"/></br>
            Price : <input type="text" name="price" value="${pizza.price}"/></br>
            <input type="submit" value="Create"/></br>
        </form>
    </body>

这工作正常,直到我尝试更改控制器中的 URI,例如:

@RequestMapping(value = "/addnew/add", method = RequestMethod.POST)
@RequestMapping(value = "/edit/add", method = RequestMethod.GET)

并在表单标签中:

<form action="addnew/add" method="post">
<form action="edit/add" method="get">

我得到 HTTP Status 404。我有一个问题:我应该如何使用 action 属性,才能有机会请求这样的映射 @RequestMapping(value = "/edit/add"...

您最有可能的问题是,在您当前使用 action 属性的方式中,它被视为相对路径,并被添加到当前 url。根据浏览器中的当前 url,它们可能会或可能不会工作。

为避免这种情况,请在 action 属性中使用绝对路径,例如

<form action="${pageContext.request.contextPath}/pizza/addnew/add" method="post">
<form action="${pageContext.request.contextPath}/pizza/edit/add" method="get">