2016-11-27 5 views
2

У меня есть контроллер в 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 пакет внутри игры, он работает.

Любые советы очень ценятся.

+0

Я не уверен, что полностью понимаю ваш код. У вас есть два класса с именем «Пользователь»? Один в пакете 'models', а другой в пакете' com.neruti'? –

+0

Да, пакет 'models' предназначен для тестирования и проверки того, что мой код работает правильно. Для производства будет использоваться только пакет 'com.neruti'. –

ответ

0

По какой-то причине я не могу понять, после того как я переместил Reads[T] и Writes[T] преобразователи на другой объект, он работает.

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

  • Нет связанных вопросов^_^