我正在使用play代理来自ui的API调用。例如POST:
def post(url: String) = Action { implicit request =>
Async {
WS.url(proxyUrl + request.uri)
.withQueryString(request.queryString.mapValues(_.head).toSeq: _*)
.withHeaders(request.headers.toMap.mapValues(_.head).toSeq: _*)
.post(request.body.asJson).map(response => Ok(response.body))
}
}
但这只能处理“application / json”和“text / json”内容类型。但是现在我想用自定义内容类型发出请求:“application / vnd.MyCustomType-v1 + json; charset = utf-8”,当然它不适用于当前的实现。尝试了不同的解决方案,但似乎没有任何效果。有任何想法吗? 我正在使用Play 2.1
答案 0 :(得分:1)
json body解析器的源代码如下:
def json(maxLength: Int): BodyParser[JsValue] = when(
_.contentType.exists(m => m.equalsIgnoreCase("text/json") || m.equalsIgnoreCase("application/json")),
tolerantJson(maxLength),
createBadResult("Expecting text/json or application/json body")
)
tolerantJson
本身是一个正文解析器,可以在不检查内容类型标头的情况下进行json解析,因此您应该能够使用它来解析您的请求,而不是parse.json
如果您想进一步使用解析器来检查特定的content-type
标题,那么您可以使用
when(
_.contentType.exists(m => m.equalsIgnoreCase(expectedContentType)),
tolerantJson(maxLength),
createBadResult("Wrong content type")
)
创建自己的解析器。