2016-11-27 39 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]转换器移动到另一个对象后,它可以正常工作。