2016-11-27 35 views
2

我在由SBT Play管理框架(2.5.4)的控制器。播放框架無法導入播放JSON隱含讀者與作家

userController.scala

package controllers 

// import models.User 
import com.neruti.User 

import play.api._ 
import play.api.mvc._ 
import play.api.libs.json._ 
import play.api.libs.functional.syntax._ 
import pdi.jwt._ 
import pdi.jwt.{JwtPlayImplicits, JwtSession} 
import play.api.mvc.Controller 

import java.time.LocalDate 
import java.util.UUID 


class UserProfileController extends Controller with JwtPlayImplicits { 

    def putUserProfile = Action(parse.json) {request => 
    val userProfile: JsResult[User] = request.body.validate[User] 

    userProfile.map { 
     case user:User => Ok("Its good") 
    }.recoverTotal{ 
     e=>BadRequest("Detected error" + JsError.toFlatJson(e)) 
    } 
    } 
} 

下面是由的Maven管理在另一個單獨的模塊(核心)用戶模型。多模塊的Maven模式。

User.scala

package com.neruti 

import play.api.libs.json._ 
import play.api.data.validation.ValidationError 
import play.api.libs.functional.syntax._ 

case class User(
    username: String, 
    email: Option[String] = None 
) 

object User { 
    implicit val userReads: Reads[User] =(
    (__ \ "username").read[String] and 
    (__ \ "email").readNullable[String] 
)(User.apply _) 

    implicit val userWrites: Writes[User] =(
    (__ \ "username").write[String] and 
    (__ \ "email").writeNullable[String] 
)(unlift (User.unapply)) 
} 

問題是userController.scala裏面,它不能看到隱含的JSON讀者範圍&作家。

userController.scala:44: No Json deserializer found for type com.neruti.User. Try to implement an implicit Reads or Format for this type. 
[error]  val userProfile: JsResult[User] = request.body.validate[User] 

是不是import com.neruti.User._,不導入隱式方法。

但是,如果我取消註釋import models.User,使用models包內部播放,它的工作原理。

任何意見是非常感謝。

+0

我不知道我完全理解你的代碼。你有兩個名爲'User'的類嗎?一個在'models'包中,另一個在'com.neruti'包中? –

+0

是的,'models'軟件包用於測試和驗證我的代碼是否正常工作。 對於生產,只是'com.neruti'包將被使用。 –

回答

0

出於某種原因,我無法理解,在將Reads[T]Writes[T]轉換器移動到另一個對象後,它可以正常工作。