如何在Scalatra中获取帖子请求的正文?

Rog*_*ach 15 scala scalatra

我有一个scalatra servlet:

post("/asdf") {
  ???
}
Run Code Online (Sandbox Code Playgroud)

我的客户在邮件正文中发送xml,因此我需要从请求中提取原始文本.我如何在scalatra中做到这一点?

Jan*_*anx 20

request.body
Run Code Online (Sandbox Code Playgroud)

让您访问请求正文.因此,如果它是XML并且您希望它作为NodeSeq,请执行以下操作:

XML.loadString(request.body)
Run Code Online (Sandbox Code Playgroud)


vir*_*yes 5

+1,好问题

您可以通过Scalatra路由中的“ request”关键字访问Servlet Request,因此,如果发布主体本身是xml字符串,则getInputStream和getContentLength可以提供访问权限。即客户端传递存储在命名字段中的xml作为表单发布的一部分。如果是后者,则以下应该可以解决问题:

post("/foo" && request.getHeader("Accept-Encoding") contains "application/xml") {
  val xml = XML.fromString(params("xml-param-field-name"))
}
Run Code Online (Sandbox Code Playgroud)

如果要从字符串使用以上解析,请参见Scalatra Book中的Anti-XML Integration