gpt4 book ai didi

java - 如何使用Play返回415不支持的媒体类型?

转载 作者:行者123 更新时间:2023-12-01 09:25:18 24 4
gpt4 key购买 nike

Play 1.x 似乎有此功能,但我在 2.x 文档中找不到示例。有没有办法将 Controller 配置为在 acceptscontent-type 不匹配时返回 415?我可以在 Controller 中手动执行此操作,如下所示:

// for GET, POST, PUT, etc.
if (!request().accepts(Http.MimeTypes.JSON)) {
return new StatusHeader(UNSUPPORTED_MEDIA_TYPE);
}
// for POST, PUT, PATCH, etc.
if (!request().contentType().orElse("").equals(Http.MimeTypes.JSON)) {
return new StatusHeader(UNSUPPORTED_MEDIA_TYPE);
}

但似乎框架应该支持这一点,而不必在每个 Controller 方法中使用该代码块。

最佳答案

Play 2.5.x 确实提供了对此的支持。

抱歉,我的示例是在 Scala 中,但您可以使用 Java API 实现相同的效果 - 只需查看下面的文档即可。

// Scala example

def accept = Action(parse.json) { implicit request =>
render {
case Accepts.Json() => Ok(Json.parse("""{"message" : "Thanks for sending and accepting JSON"}"""))
}
}

通过指定您正在使用显式 parse.json 主体解析器,如果客户端尝试发送任何内容,Play 将自动为您构建一个带有 415 代码的结果除了 Content-Type 的 application/json 之外。请参阅the Java examples涵盖了这一点。

case Accepts.Json() 是一个提取器,用于测试媒体类型是否在范围内(即用例中的 application/json)。如果客户端发送不同的媒体类型,那么我认为 Play 会构建 406 Not Acceptable。请参阅the Java examples .

关于java - 如何使用Play返回415不支持的媒体类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39881603/

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