找不到参数消息的隐含值:play.api.i18n.Messages

时间:2016-07-06 19:00:44

标签: scala playframework

我有以下代码

import play.api.i18n.{MessagesApi, Messages, I18nSupport}
import play.api.libs.json.Json

case class HttpMessage(key: String, message: String)

object HttpMessage {
  implicit val jsonFormat = Json.format[HttpMessage]

  def apply(key: String): HttpMessage = {
    HttpMessage(key, Messages(key))
  }
}

编译时会抛出

[error] could not find implicit value for parameter messages: play.api.i18n.Messages
[error]     HttpMessage(key, messages(key))
[error]                              ^

我做了一些研究,似乎找不到implicit的{​​{1}}值。它似乎必须像控制器一样注入,但我不知道如何因为我在这里面对MessagesAPIobject

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

来自https://stackoverflow.com/a/30843682/4496364的方法:

import play.api.Play.current import play.api.i18n.Messages.Implicits._

第一行已被弃用,因为Play现在可以随处使用DI。

我的方法(不管是好还是坏):

case class HttpMessage(key: String, message: String)

object HttpMessage {
  implicit val jsonFormat = Json.format[HttpMessage]

  def apply(key: String)(implicit messages: Messages): HttpMessage = {
    HttpMessage(key, Messages(key))
  }
}

我必须创建类似的解决方案,所以我使用隐式方式,Play也在其模板中使用。您必须在控制器中使用implicit request才能使其正常工作。此外,在所有类似服务的课程中,您需要转发此implicit messages: Messages ...