Return 播放 2 中出现 JSON 404 错误。4.x
Return a JSON 404 error in Play 2.4.x
我想 return 当用户点击不存在的路由时自定义 404 消息。我已经:
package controllers
import play.mvc.Results
import play.api.mvc.Results._
import play.api.GlobalSettings
import play.api.mvc.Result
import play.mvc.Http.RequestHeader
import play.libs.{F, Json}
import scala.concurrent.Future
/**
* Created by ethan on 8/25/15.
*/
object Global extends GlobalSettings {
override def onHandlerNotFound(request: RequestHeader): Result = {
NotFound(Json.newObject())
}
}
但是编译器说 method onHandlerNotFound overrides nothing
。我相信这是因为我正在将 returned 内容的类型更改为 JSON 对象,而不是 HTML.
这可行:
override def onHandlerNotFound(request: RequestHeader): Result = {
Future.successful(NotFound(views.html.errors.notFoundPage()))
}
但我不想要 HTML 错误页面,我想要 JSON 响应。
Future.successful(NotFound(Json.newObject()))
也不行。
如何让我的 API 变成 return JSON 404? (这也适用于 500 个错误,我 运行 遇到了同样的问题)。
- 播放 2.4.2
- Scala 2.11.6
编辑
有效的最终代码:
import play.api._
import play.api.libs.json._
import play.api.mvc._
import play.api.mvc.Results._
import scala.concurrent.Future
object Global extends GlobalSettings {
override def onHandlerNotFound(request: RequestHeader) = {
Future.successful(NotFound(Json.obj("error" -> "Not Found")))
}
}
您正在混合使用 Java 和 Scala API。在 Scala 中,仅从 play.api.*
导入。
编译器是正确的——你的 onHandlerNotFound
没有覆盖任何东西,因为 play.api.GlobalSettings
没有定义一个采用 play.mvc.Http.RequestHeader
的名称的方法,这是来自Java API。你应该使用 play.api.mvc.RequestHeader
.
结果类型和 JSON 库也是如此。两者本质上并不兼容,您需要确保您不会在 Scala 中从 Java API 导入,在 Play 中反之亦然。
我想 return 当用户点击不存在的路由时自定义 404 消息。我已经:
package controllers
import play.mvc.Results
import play.api.mvc.Results._
import play.api.GlobalSettings
import play.api.mvc.Result
import play.mvc.Http.RequestHeader
import play.libs.{F, Json}
import scala.concurrent.Future
/**
* Created by ethan on 8/25/15.
*/
object Global extends GlobalSettings {
override def onHandlerNotFound(request: RequestHeader): Result = {
NotFound(Json.newObject())
}
}
但是编译器说 method onHandlerNotFound overrides nothing
。我相信这是因为我正在将 returned 内容的类型更改为 JSON 对象,而不是 HTML.
这可行:
override def onHandlerNotFound(request: RequestHeader): Result = {
Future.successful(NotFound(views.html.errors.notFoundPage()))
}
但我不想要 HTML 错误页面,我想要 JSON 响应。
Future.successful(NotFound(Json.newObject()))
也不行。
如何让我的 API 变成 return JSON 404? (这也适用于 500 个错误,我 运行 遇到了同样的问题)。
- 播放 2.4.2
- Scala 2.11.6
编辑 有效的最终代码:
import play.api._
import play.api.libs.json._
import play.api.mvc._
import play.api.mvc.Results._
import scala.concurrent.Future
object Global extends GlobalSettings {
override def onHandlerNotFound(request: RequestHeader) = {
Future.successful(NotFound(Json.obj("error" -> "Not Found")))
}
}
您正在混合使用 Java 和 Scala API。在 Scala 中,仅从 play.api.*
导入。
编译器是正确的——你的 onHandlerNotFound
没有覆盖任何东西,因为 play.api.GlobalSettings
没有定义一个采用 play.mvc.Http.RequestHeader
的名称的方法,这是来自Java API。你应该使用 play.api.mvc.RequestHeader
.
结果类型和 JSON 库也是如此。两者本质上并不兼容,您需要确保您不会在 Scala 中从 Java API 导入,在 Play 中反之亦然。