2014-09-23 5 views
0

Я пишу приложение для воспроизведения 2.3 (используя Scala). Я использую защищенный социальный модуль (мастер). Теперь i'v создал свой класс User:Ошибка при переопределении метода чтения в признаках Чтение

class LoginUser(
    providerId: String, 
    userId: String, 
    firstName: Option[String], 
    lastName: Option[String], 
    fullName: Option[String], 
    email: Option[String], 
    avatarUrl: Option[String], 
    authMethod: AuthenticationMethod, 
    oAuth1Info: Option[OAuth1Info] = None, 
    oAuth2Info: Option[OAuth2Info] = None, 
    passwordInfo: Option[PasswordInfo] = None 
       ) extends BasicProfile(providerId, userId, firstName, lastName, fullName, 
             email, avatarUrl,authMethod, oAuth1Info, oAuth2Info, 
             passwordInfo) 

Для чтения/записи даты пользователя в моей MongoDB я пишу неявный объект:

object LoginUser { 
    implicit val authenticationMethodFormat = Json.format[AuthenticationMethod] 
    implicit val oAuth1InfoFormat = Json.format[OAuth1Info] 
    implicit val oAuth2InfoFormat = Json.format[OAuth2Info] 
    implicit val passwordInfoFormat = Json.format[PasswordInfo] 
    implicit val profileFormat = Json.format[BasicProfile] 
    implicit object LoginUserFormat extends Format[LoginUser] { 
    def writes(user: LoginUser): JsValue = Json.obj(
     "providerId" -> user.providerId, 
     "userId" -> user.userId, 
     "firstName" -> user.firstName, 
     "lastName" -> user.lastName, 
     "fullName" -> user.fullName, 
     "email" -> user.email, 
     "avatarUrl" -> user.avatarUrl, 
     "authMethod" -> user.authMethod, 
     "oAuth1Info" -> user.oAuth1Info, 
     "oAuth2Info" -> user.oAuth2Info, 
     "passwordInfo" -> user.passwordInfo) 
    def reads(json: JsValue): LoginUser = new LoginUser(
     (json \ "providerId").as[String], 
     (json \ "userId").as[String], 
     (json \ "firstName").as[Option[String]], 
     (json \ "lastName").as[Option[String]], 
     (json \ "fullName").as[Option[String]], 
     (json \ "email").as[Option[String]], 
     (json \ "avatarUrl").as[Option[String]], 
     (json \ "authMethod").as[AuthenticationMethod], 
     (json \ "oAuth1Info").as[Option[OAuth1Info]], 
     (json \ "oAuth2Info").as[Option[OAuth2Info]], 
     (json \ "passswordInfo").as[Option[PasswordInfo]] 
     ) 


    } 

Но компилятор говорит мне следующее сообщение об ошибке:

[error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:60: overriding method reads in trait Reads of type (json: play.api.libs.json.JsValue)play.api.libs.json.JsResult[security.LoginUser]; 
[error] method reads has incompatible type 
[error] def reads(json: JsValue): LoginUser = new LoginUser(
[error]  ^
[error] one error found 
[error] (compile:compile) Compilation failed 

Что случилось?

+0

Рассмотрите возможность использования комбинаторов JSON. Использование 'as [T]' будет генерировать исключение, если тип не совпадает, вместо того, чтобы возвращать какую-либо проверку. –

ответ

1
overriding method reads in trait Reads of type (json: play.api.libs.json.JsValue)play.api.libs.json.JsResult[security.LoginUser]; 
[error] method reads has incompatible type 

означает, что метод подписи reads метода в Reads признака

def read(json:JsValue) : JsResult[LoginUser] 

Поскольку вы пытались осуществить

def read(json:JsValue) : LoginUser 

ваш метод подписи столкнулись с одной базовой чертой , и поэтому не удалось.

Смежные вопросы