Spark 的 DELETE 处理程序在访问任何 request.queryParams 键时返回 NULL

Spark's DELETE handler returns NULL when accessing any request.queryParams key

提问人:Robert S 提问时间:12/16/2021 最后编辑:Robert S 更新时间:12/17/2021 访问量:185

问:

我使用 Spark 框架开发了一个非常简单的 API(参考:sparkjava.com)。我编写了一个删除处理程序,并使用 Postman 对其进行了测试。

问题

当我尝试使用 分配一个值时,即使数据在 HTTP 请求中并显示在 中,也会分配一个 NULL 值。request.queryParamsrequest.body

我的 Java:
delete("/threat", (req,res) -> {
    System.out.println("DELETE /threat");
    System.out.println("tid = "+ req.queryParams("tid"));
    res.status(200);
    return "done";
}); 
邮递员请求/响应
DELETE http://localhost:4567/threat 200 7ms
Request Headers
   Content-Type: application/x-www-form-urlencoded
   User-Agent: PostmanRuntime/7.28.4
   Accept: */*
   Postman-Token: 90615059-38c6-4901-9838-249b36c35887
   Host: localhost:4567
   Accept-Encoding: gzip, deflate, br
   Connection: keep-alive
   Content-Length: 40
Request Body
   tid: "839c9af2-9ab4-495d-883b-3cd509b8116d"
Response Headers
   Date: Wed, 15 Dec 2021 22:03:02 GMT
   Access-Control-Allow-Origin: *
   Content-Type: text/html;charset=utf-8
   Transfer-Encoding: chunked
   Server: Jetty(9.4.z-SNAPSHOT)
Response Body
   done
控制台输出
DELETE /threat
tid = null

如果我输出,那么它会输出,但奇怪的是,输出是在尝试获取 .req.body()tid=839c9af2-9ab4-495d-883b-3cd509b8116dnullreq.queryParams("tid")

我做过的测试

如果我用它代替它,那就行了!脚本输出:post()delete()

POST /threat
tid = 839c9af2-9ab4-495d-883b-3cd509b8116d
社区的问题

因此,在我为删除处理程序编写自己的正文解析器之前,谁能告诉我为什么在处理程序中返回 null?req.queryParams("tid")delete()

我做过的研究

谷歌搜索,搜索 StackOverflow,通读文档 SparkJava.com

Maven信息(取自我的pom.xml)
<dependency>
   <groupId>com.sparkjava</groupId>
   <artifactId>spark-core</artifactId>
   <version>2.8.0</version>
</dependency>
邮递员 Spark-Java

评论


答:

0赞 Robert S 12/17/2021 #1

(编辑:感谢@Aravinth通过他们的帖子帮助我找到这些信息:Swagger openApi Spec 3.0 - DELETE opeartion

不支持 DELETE 上的有效负载。虽然这在法律上不是,但 Spark Java 似乎不支持通过 .queryParams

RFC7231指出:

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

(来源: https://www.rfc-editor.org/rfc/rfc7231#section-4.3)