PlayFramework:以字符串形式获取原始请求 xml 正文
Posted
技术标签:
【中文标题】PlayFramework:以字符串形式获取原始请求 xml 正文【英文标题】:PlayFramework: Get original request xml body as string 【发布时间】:2015-12-29 03:54:37 【问题描述】:我收到一个以 xml 作为正文的请求,问题是我必须读取正文中的原始字符串。 这是因为我必须读取 xml 标头中的一些 cmets 来检测文档的类型。
根据播放框架documentation,您必须告诉播放框架将请求正文解析为 xml
def sayHello = Action request =>
request.body.asXml.map xml =>
(xml \\ "name" headOption).map(_.text).map name =>
Ok("Hello " + name)
.getOrElse
BadRequest("Missing parameter [name]")
.getOrElse
BadRequest("Expecting Xml data")
但是,如果我尝试打印 xml.toString
,我不会得到带有 cmets 的原始 xml,因为它们在主 xml 元素之外。
我也尝试过使用request.body.asText
,但它会检查Content-Type
标头,因为它是application/xml
,所以它不会返回字符串而是返回None
如何将请求的原始正文提取为字符串?
【问题讨论】:
【参考方案1】:你可以像tolerantText
一样使用
def save = Action(parse.tolerantText) request =>
Ok("Got: " + request.body)
这个不检查 Content-Type 标头并始终加载 以字符串形式请求正文。
https://www.playframework.com/documentation/2.4.x/ScalaBodyParsers
【讨论】:
是否有 API 可以内联执行该操作? (不在行动论点中)?目前看来request.body.*
缺少 asTolerantText
我从不这样做,也没有在文档中见面。我想你可以查看 GitHub 上的播放源代码,了解Action
如何使用请求正文解析器处理请求。
Too bad trophyText 不使用 UTF-8 但 ISO-8859-1 github.com/playframework/playframework/issues/5334
指定时使用。来自github.com/playframework/playframework/blob/master/framework/…// Encoding notes: RFC-2616 section 3.7.1 mandates ISO-8859-1 as the default charset if none is specified. bytes.decodeString(request.charset.getOrElse("ISO-8859-1"))
的源代码以上是关于PlayFramework:以字符串形式获取原始请求 xml 正文的主要内容,如果未能解决你的问题,请参考以下文章