15

我有一个 scalatra servlet:

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

我的客户在帖子正文中发送 xml,所以我需要从请求中提取原始文本。我如何在scalatra中做到这一点?

4

2 回答 2

20
request.body

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

XML.loadString(request.body)
于 2012-03-28T17:06:38.743 回答
5

+1,好问题

您可以通过 Scalatra 路由中的“request”关键字访问 Servlet 请求,因此如果帖子正文本身是 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 Integration

于 2012-03-28T16:52:12.027 回答