如何在Scalatra中获取POST请求的主体?

15
我有一个Scalatra Servlet:

我有一个Scalatra Servlet:

post("/asdf") {
  ???
}

我的客户通过POST请求发送xml,因此我需要从请求中提取原始文本。在scalatra中如何完成?

2个回答

20
request.body

它使您能够访问请求体。因此,如果它是XML并且您想要将其作为NodeSeq,请执行以下操作:

XML.loadString(request.body)

请确保Content-Type不是'application/x-www-form-urlencoded'(请参见Ross在https://groups.google.com/forum/#!topic/scalatra-user/lApjIJXiNqg上的回答) - uthomas

5

+1,好问题

在Scalatra路由中,您可以通过"request"关键字访问Servlet请求,因此如果post主体本身是xml字符串,则getInputStream和getContentLength提供访问权限;即客户端未将xml存储在表单提交的命名字段中。如果是后者,则以下内容应该可以解决问题:

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

如果您想使用上述字符串解析,请查看Scalatra Book中的Anti-XML集成(链接)


我是Scala的新手,正在做这个^^但是我在&&/contains上遇到编译错误。 - gursahib.singh.sahni
@gursahib.singh.sahni 不太确定,我已经五年没用Scalatra了;-) 也许可以尝试他们的Gitter频道 - virtualeyes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接