提问人:Robert S 提问时间:12/16/2021 最后编辑:Robert S 更新时间:12/17/2021 访问量:185
Spark 的 DELETE 处理程序在访问任何 request.queryParams 键时返回 NULL
Spark's DELETE handler returns NULL when accessing any request.queryParams key
问:
我使用 Spark 框架开发了一个非常简单的 API(参考:sparkjava.com)。我编写了一个删除处理程序,并使用 Postman 对其进行了测试。
问题
当我尝试使用 分配一个值时,即使数据在 HTTP 请求中并显示在 中,也会分配一个 NULL 值。request.queryParams
request.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-3cd509b8116d
null
req.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>
答:
0赞
Robert S
12/17/2021
#1
(编辑:感谢@Aravinth通过他们的帖子帮助我找到这些信息:Swagger openApi Spec 3.0 - DELETE opeartion 。
不支持 DELETE 上的有效负载。虽然这在法律上不是,但 Spark Java 似乎不支持通过 .queryParams
RFC7231指出:
DELETE 请求消息中的有效负载没有定义的语义; 在 DELETE 请求上发送有效负载正文可能会导致一些现有的 实现来拒绝请求。
评论