【问题标题】:Play Framework can't import play-json implicit reader & writerPlay Framework 无法导入 play-json 隐式读写器
【发布时间】:2017-04-11 05:43:51
【问题描述】:

我在 Play Framework (2.5.4) 中有一个控制器,由 sbt 管理。

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,在 play 中使用 models 包,它可以工作。

非常感谢任何建议。

【问题讨论】:

  • 我不确定我是否完全理解您的代码。你有两个名为User 的类吗?一个在models 包中,另一个在com.neruti 包中?
  • 是的,models 包用于测试和验证我的代码是否正常工作。对于生产,仅使用com.neruti 包。

标签: scala maven playframework sbt play-json


【解决方案1】:

由于某种我无法理解的原因,在我将 Reads[T]Writes[T] 转换器移动到另一个对象后,它可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    • 2014-01-18
    • 2013-04-07
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    相关资源
    最近更新 更多