java - 为 HttpDelete 编程 Spring MVC Controller 和 jsp

标签 java spring jsp rest spring-mvc

我正在尝试通过删除链接(href)或删除按钮(表单)删除页面上的实体。我正在使用删除按钮,因为链接需要“GET”而不是“POST”

这是打算这样做的 JSP 代码:

<td><form:form method="DELETE" action="/client/invoices/${invoice.id}"><input type="submit" value="delete"></form:form></td>

生成的 html 是这样的:

<td><form id="command" action="/client/invoices/9" method="post"><input type="hidden" name="_method" value="DELETE"/><input type="submit" value="delete"></form></td>

所以,我很高兴。它有 _method 指示它是一个 DELETE 操作。这是我的 Controller 代码:

@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
public String delete(@PathVariable("id") Long id, @RequestParam(value = "page", required = false) Integer page, @RequestParam(value = "size", required = false) Integer size, Model uiModel) {
        invoiceServiceHibernate.removeInvoice(id);
        return "redirect:/invoices";
}

因此,发生的情况是未调用此方法。我有另一种方法,它执行 POST 来创建发票并单击删除按钮而不是创建发票。我的猜测是 Controller 将 servlet 视为 POST 请求并使用第一种方法处理 POST 请求,在本例中是创建新发票。

我试着让它成为“RESTful”,所以我希望它成为 /invoice/id 并使用 POST, PUT, DELETE, GET 但我不确定如何使用 Spring MVC 在 Controller 中对其进行编码。

我可以通过附加“动词”(例如 /invoices/id/delete 并将 Controller 设置为

@RequestMapping(value = "/{id}/delete", method = RequestMethod.POST)

请注意,RequestMethod.POST 但由于映射值明确具有 /id/delete,因此它不使用映射到 /invoices/发票/ID

我希望我是清楚的。如果有人有任何建议或示例代码(强烈推荐),我将不胜感激。我已经阅读了这些 SO 链接以供引用: Link1 Link2 Link3

最佳答案

您是否设置了 HiddenHttpMethodFilter在你的 web.xml 中?该过滤器将发布的方法参数转换为 HTTP 方法,并允许在 Spring MVC 表单标记中支持方法转换。

<filter>
    <filter-name>hiddenHttpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>hiddenHttpMethodFilter</filter-name>
    <servlet-name>servletName</servlet-name>
</filter-mapping>

关于java - 为 HttpDelete 编程 Spring MVC Controller 和 jsp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7903556/

相关文章:

Java:HashMap类的这个方法是什么意思?

java - 如何从 json 字符串中获取值

java - 在eclipse java中设置构建路径

java - 用于 Java 客户端验证的 GWT Validator 框架

java - 如何选择所有具有相同名称的输入插入到Mysql中?

Java - 使用数组创建不同的方法

java - 我可以将 null 设置为 Spring 中 @Value 的默认值吗?

spring - Testcontainers mongodb - 尚未提供集群描述。超时前等待 30000 毫秒

java - 为什么 Spring 项目导出的可运行 JAR 不能在另一个系统中工作?

java - 如何在 JSP 中创建评级系统?