【发布时间】:2021-11-04 16:50:02
【问题描述】:
当通过浏览器发出 POST 请求时,scalatra 应用程序中使用的 json4s 会抛出“com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input”。
我有一个 ScalatraServlet 用于从浏览器提交 FORM。这是 Servlet。
class PagesController(service: RecordService) extends ScalatraServlet with JacksonJsonSupport {
post("/addRecord") {
contentType = "text/html"
//implicit val formats = DefaultFormats
val jsonPayload = request.body
println(s"payload: $jsonPayload")
val x = parse(request.body)
println(s"parsed: $x")
val record = x.extract[MRecord]
println(s"object: $record")
service.add(Record(0, "Mocked data"))
println(s"added $recordModel")
redirect(URL.LANDING_PAGE_URL)
}
当我通过 cli/rest-client 以 content-type 为 appplication/www-form-url-encode 运行 POST 请求时,没有这样的错误,我可以从 println 语句。但是,当浏览器提交表单时,“com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input”
是什么原因导致这个异常只在表单提交时发生,而不是在通过 REST 客户端/cli 提交时发生?
【问题讨论】:
-
你使用的是哪个版本的 scalatra 和 json4s?
-
Scalatra version : 2.7.0和json4 is 3.5.5 -
注意:Json4s 是 vulnerable under DoS/DoW attacks!
-
当然。感谢您的来信。