Несоответствие типов при использовании Scala Trait в Play? - PullRequest
1 голос
/ 01 марта 2012

Использование Play!Рамки 1.2.4.У меня есть отличная черта, которая проверяет ключ API и HTTPS, но если я хочу получить доступ к учетной записи, связанной с этим ключом, и ссылаться на нее в моем контроллере, он выдает type mismatch; found : java.lang.Object required: Long

Так вот мой APIконтроллер (неполный):

object API extends Controller with Squeryl with SecureAPI {

  import views.API._

  def job(param:String) = {


    val Job = models.Job
    param match {
      case "new"    => Job.createFromParams(params,thisAccount) //thisAccount comes from the trait
      case "update" =>
      case "get"    =>
      case "list"   =>
    }
  }

}

и защищенная черта:

trait SecureAPI {
  self:Controller =>

  @Before
  def checkSecurity(key:String) = {
      if(!self.request.secure.booleanValue) {
          Redirect("https://" + request.host + request.url);
      } else {
          models.Account.getByKey(key) match {
            case Some(account)  =>  {
              renderArgs += "account" -> account.id
              Continue
            }
            case _  =>  Forbidden("Key is not authorized.")
          }
      }
  }

  def thisAccount = renderArgs("account").get
}

Как мне правильно получить доступ к thisAccount?Спасибо

1 Ответ

2 голосов
/ 01 марта 2012

Ваша проблема в том, что renderArgs объявлен только для возврата Object из его вызова get (что достаточно справедливо, потому что это может быть что угодно).

Следовательно, предполагаемый тип вашего thisAccount метода будет () => Object.

Вам нужно будет преобразовать возвращаемый тип в Long, что-то вроде (хотя, возможно, с некоторой проверкой ошибок):

def thisAccount = renderArgs("account").get.asInstanceOf[Long]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...