gpt4 book ai didi

rest - 在 Play 中请求内容类型! REST 网络服务框架

转载 作者:行者123 更新时间:2023-12-04 17:38:44 25 4
gpt4 key购买 nike

我正在尝试使用 Play 实现一个 REST 网络服务!框架。我知道如何通过指定多个模板以不同格式(JSON、XML、HTML 等)返回响应。但是,我没有找到有关如何在(例如 POST)请求(表单编码、JSON、XML 等)中处理不同内容类型的任何信息。

是否可以注释一个方法以仅匹配某些内容类型(例如@Consumes)?我是否必须使用 if 来区分不同的请求内容类型? - Controller 方法中的子句?

最佳答案

查看用于组合正文解析器的 Play 文档:

http://www.playframework.com/documentation/2.2.0/ScalaBodyParsers

如果您想将帖子正文限制为仅 xml 或 json,您可以按照以下方式编写:

val xmlOrJson = parse.using {
request =>
request.contentType.map(_.toLowerCase(Locale.ENGLISH)) match {
case Some("application/json") | Some("text/json") => play.api.mvc.BodyParsers.parse.json
case Some("application/xml") | Some("text/xml") => play.api.mvc.BodyParsers.parse.xml
case _ => play.api.mvc.BodyParsers.parse.error(Future.successful(UnsupportedMediaType("Invalid content type specified")))
}
}

def test = Action(xmlOrJson) {
request =>
request.body match {
case json: JsObject => Ok(json) //echo back posted json
case xml: NodeSeq => Ok(xml) //echo back posted XML
}
}

xmlOrJson 函数查看内容类型请求 header 以确定正文解析器。如果它不是 xml 或 json,则它返回带有 UnsupportedMediaType 响应(HTTP 415)的错误正文解析器。

然后将此函数作为要限制为 xml 或 json 内容的任何操作的正文解析器传入。在操作中,您可以查看正文以确定是否已解析 xml 或 json 并进行相应处理。

关于rest - 在 Play 中请求内容类型! REST 网络服务框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9675657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com