Java 获得;405-请求方法';获取';调用时不支持";方法=删除

Java 获得;405-请求方法';获取';调用时不支持";方法=删除,java,http,servlets,spring-mvc,Java,Http,Servlets,Spring Mvc,我有一个Spring MVC web应用程序。在该表单中,有一个按钮,用于从另一个资源中删除资源: <td> <form action="/product-bases/${productBase.id}/positions/${position.id}" method="DELETE"> <input type="submit" value="delete" /> </form> </td> 因此,理论

我有一个Spring MVC web应用程序。在该表单中,有一个按钮,用于从另一个资源中删除资源:

<td>
    <form action="/product-bases/${productBase.id}/positions/${position.id}" method="DELETE">
        <input type="submit" value="delete" />
    </form>
</td>
因此,理论上,服务器应该路由到控制器。但遗憾的是,事实并非如此,因此这一职位;)

我要走了

HTTP Status 405 - Request method 'GET' not supported

type Status report

message Request method 'GET' not supported

description The specified HTTP method is not allowed for the requested resource (Request method 'GET' not supported).
Apache Tomcat/7.0.19
显然,我还没有定义get for/positions/id,但是为什么我要这样做呢,我现在想删除

(我还试图在模拟servlet上运行spring测试mvc框架,其间没有任何tomcat实现,它给了我一个400错误的请求。)。。 )

那么我在这里错过了什么

哦,只是为了省事:post和get将用于其他资源,所以我的其余设置很好

引导服务器甚至告诉我:

RequestMappingHandlerMapping [INFO] Mapped "{[/product-bases/{id}/positions/{positionId}],methods=[DELETE],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.web.servlet.ModelAndView our.view.controller.ProductBasePositionController.delete(java.lang.Integer,java.lang.Integer)

有人像我一样困惑吗?如果不是这样,请启发我

表单只能通过
GET
POST
提交(也可能是
PUT
,但我怀疑这是否得到广泛实施),因为表单提交需要一种将数据传输到服务器的方法


DELETE
方法没有请求正文,因此不支持在表单操作中指定它。

错误消息表明浏览器实际发送的是GET请求,而不是DELETE请求

您需要做的是:

  • 检查浏览器当时所在网页的来源,以及

  • 使用浏览器的web调试器,查看请求URL和方法实际上是什么


您的web.xml中是否有HiddenHttpMethodFilter过滤器

<filter>
    <filter-name>hiddenHttpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>hiddenHttpMethodFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

hiddenHttpMethodFilter
org.springframework.web.filter.hiddenhttmpmethodfilter
hiddenHttpMethodFilter
/*

在Microsoft Azure portal中,当我打开身份验证/授权时,我在Java应用程序中遇到此错误。如果您的问题与此相同,请恢复您的操作。

差不多。浏览器目前只支持GET和POST,因此在不支持GET的情况下,会悄悄地将方法更改为GET。哇,我不知道。。所以我唯一的选择似乎是在表单中放置一个隐藏的输入字段,表示name=methodvalue=delete?除了javascrip我是说。。因为我也不能通过链接发送删除。。似乎有点奇怪,使得任何试图发展真正的宁静不可能?!皮特:看。您可能想加入HTML工作组。详情请参见。啊,听起来也很有希望,我们将在周一试一试。。谢谢不幸的是,我们不能使用过滤器技巧,因为这样它就不再是可测试的了,因为我们使用的是不支持过滤器的SpringTestMVC。
<filter>
    <filter-name>hiddenHttpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>hiddenHttpMethodFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>