У меня есть контроллер в Play Framework (2.5.4), управляемый sbt.Play Framework не может импортировать play-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
пакет внутри игры, он работает.
Любые советы очень ценятся.
Я не уверен, что полностью понимаю ваш код. У вас есть два класса с именем «Пользователь»? Один в пакете 'models', а другой в пакете' com.neruti'? –
Да, пакет 'models' предназначен для тестирования и проверки того, что мой код работает правильно. Для производства будет использоваться только пакет 'com.neruti'. –