提问人:user670097 提问时间:11/16/2023 更新时间:11/16/2023 访问量:19
Apache pekko ( akka http ) - 从请求中提取的字符串正文没有引号
Apache pekko ( akka http ) - Extracted string body from request doesn't have quote
问:
我正在为我的下一个项目制作 pekko http ( akka http )。 我从请求正文实体中提取了 json 字符串,但它在字符串值上没有引号。
路由 dsl 上的代码片段:
post {
path("account") {
extract(_.request) { request =>
val body = Await.result(request.entity.toStrict(1.second).map(_.data.utf8String), 1.second)
println(body)
complete(...)
}
}
}
请求:curl -X POST http://localhost:9090/account -d '{“account”:{“name”:“TESTE”}}'
提取的 json 字符串:{account:{name:TESTE}}
有人知道如何在不删除引号的情况下提取请求正文实体吗?
答:
1赞
earthling paul
12/7/2023
#1
没有什么能阻止你这样做,但是在使用 akka-http 时,使用 Await 进行阻塞并不是一个好的做法。这还会提取原始 JSON 字符串,而不删除引号:
val jsonRaw: Route =
path("jsonRaw")(
post(
entity(as[String]) {
json =>
println("JSON raw: " + json)
complete(StatusCodes.OK)
}
)
)
要检查服务器上的请求,您可以在 application.conf 中设置这些参数以检测环境问题。
pekko {
loglevel = "DEBUG"
http.server.log-unencrypted-network-bytes = 100
...
}
评论
0赞
user670097
12/19/2023
感谢您@earthling保罗的回答,我检查了您的项目并确认其有效。但是当我在我的项目中测试时,它仍然显示出相同的prroblem。所以我尝试了只有路由代码的新项目,但仍然删除了引号。github.com/headiron/library_route_test请求:curl 127.0.0.1:6002/jsonRaw -X POST -d '{“TEST”:“TEST”}}' 控制台输出:JSON raw: '{TEST:TEST}}' 您认为需要添加任何选项吗?我找不到任何相关的配置选项并尝试删除/添加一些库,但它对解决问题没有帮助。
0赞
earthling paul
12/19/2023
嗯,我正在 Windows 和 Mac 上使用 Java 11/21 运行您的代码并获得预期的结果。因此,这可能是您的环境有所不同,例如编码。我已经更新了我的答案,其中包含在服务器上进行检查的方法。
0赞
user670097
12/20/2023
感谢@earthling保罗的检查。你是对的。我已经在 Window 上使用 IDEA 进行了测试,这个问题正在发生。在您的评论之后,我在 Linux 上使用 sbt 对其进行了测试,它可以正常工作。正如你所说,一些环境可能会影响问题,并且似乎更多地挖掘了问题。对不起,还有一个问题。是否有任何简单的 API(不是像 entity(as[String]) 这样的指令)来从请求对象中提取 json 字符串?Await.result(request.entity.toStrict(1.second).map(_.data.utf8String), 1.second) 仅提取 json 字符串就很复杂,我们不能使用 entity(as[String])
0赞
earthling paul
12/20/2023
使用 akka-http 时,使用 Await 进行阻塞不是一个好的做法,但没有什么能阻止您这样做。如果您喜欢上面的答案,您可以批准它
0赞
earthling paul
12/21/2023
添加了要回答的评论要点
评论