当前位置: 首页 > 知识库问答 >
问题:

不接受RequestMethod.DELETE

司徒高丽
2023-03-14

我正在使用tomcat v8,并试图通过RequestBody向我的REST API发送一个对象。这个REST API基本上是RequestMethod。这个API内部的逻辑是删除RequestBody中传递的对象。

这对我不起作用。我后来不得不将我的方法转换为POST,但我仍然想知道DELETE是否不接受RequestBody?

这是来自Spring框架或REST原则的限制,还是与我的Tomcat配置(server.xml)文件有关。

共有2个答案

於永寿
2023-03-14

这是来自Spring框架或REST原则的限制,还是与我的Tomcat配置(server.xml)文件有关

是的,这与您的Tomcat配置有关。

您必须在server.xml中启用解析DELETE方法(PUT也是如此),如下所示:

    <!-- A "Connector" represents an endpoint by which requests are received
         and responses are returned. Documentation at :
         Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
         Java AJP  Connector: /docs/config/ajp.html
         APR (HTTP/AJP) Connector: /docs/apr.html
         Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
    -->
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               parseBodyMethods="POST,PUT,DELETE"
               redirectPort="8443" />
陈鸿才
2023-03-14

但我仍然想知道DELETE不接受RequestBody吗?

这是预期的行为。HTTP 1.1规范的RFC 7231版本规定:

删除请求消息中的负载没有定义的语义;在删除请求中发送有效负载正文可能会导致一些现有的实现拒绝该请求。

在这种情况下,您似乎在Tomcat中遇到了默认限制。(这是完全合法的行为...根据 HTTP 规范。

您可以覆盖默认行为:查看其他答案。然而,我觉得删除动词允许或要求请求体的API设计很差。当然,这是违反直觉的。

 类似资料:
  • 下面,我有我试图使用的代码。它总是命中捕捉,返回空。月和日都是整数,它们已经过检查,以确保它们在现有日期内。不管怎样,我用“05”测试一个月,用“02”测试一天。由于某种原因, ##/## 输入不起作用吗? 编辑:我正在尝试格式化此输出,使其看起来像“May 02”。当我查看文档时,我看到页面的很大一部分专门用于格式化输出。为什么我的格式不是这样?

  • 这是我的蓝图代码。 内部消息工作。 外部消息不工作。 我在docker中运行Red Hat AMQ 7和Fuse 7。内部消息队列在服务之间正常工作。 使用AMQ 6,当在activemq中设置时,我能够向61613上的嵌入式代理发送和接收STOMP消息。xml 现在,我正在使用AMQ 7.0的默认设置,它将接受程序设置为0.0.0.0:61616和61613,这两个接受STOMP协议。 但是相同

  • 我正在将现有代码迁移到一个超类/子类的情况下。见下文。 方法在父类中:

  • 问题内容: 我很想使用,但似乎不那么灵活。什么是正确的方法? 问题答案: 我已经使用做了类似的操作。这对我有用:

  • 问题内容: 在Java 8中,这有效: 但这不是: Maps允许使用null键,并且List.class.getSuperclass()返回null。但是Collectors.groupingBy在Collectors.java的第907行发出了NPE: 如果我创建自己的收集器,则此行会更改为: 我的问题是: 1)Collectors.groupingBy的Javadoc并未表示不应映射空键。是否

  • 所以我做了一个测试窗口,里面有一个JTextField。我不知道出了什么问题。下面是主要代码。问题是,无论我做什么,我都无法编辑文本字段,也无法编辑我创建的第二个文本字段。我有一个带有文本字段的示例程序,它也可以工作,但根本不工作。 我不确定是否需要发布它,但我可以在这里获得完整程序的示例罐。我只发布了处理文本字段的区域 编辑:完整的源代码可在此处获得:GITHUB 我移除了一些东西,它成功了,我