2016-11-27 2 views
2

Ich habe einen Controller in Play Framework (2.5.4) verwaltet von sbt.Play Framework kann play-json impliziter Reader & Writer nicht importieren

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)) 
    } 
    } 
} 

Nachfolgend finden User-Modell in einem anderen separaten Modul (Kern) verwaltet von Maven. Ein Multi-Modul Maven-Muster.

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)) 
} 

Ausgabe ist im Inneren des userController.scala, ist es nicht implizit JSON Leser & Schriftsteller in ihrem Umfang zu sehen.

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] 

Hat import com.neruti.User._, importiert keine impliziten Methoden.

Allerdings, wenn ich import models.User unkommentiert, mit models Paket im Spiel, funktioniert es.

Jeder Rat wird sehr geschätzt.

+0

Ich bin mir nicht sicher, ob ich Ihren Code vollständig verstanden habe. Haben Sie zwei Klassen namens "User"? Eins im 'models' Paket und das andere im' com.neruti' Paket? –

+0

Ja, das Paket 'models' dient zum Testen und Verifizieren, dass mein Code ordnungsgemäß funktioniert. Für die Produktion wird nur 'com.neruti' Paket verwendet. –

Antwort

0

Aus irgendeinem Grund kann ich nicht nachvollziehen, nachdem ich Reads[T] und Konverter auf ein anderes Objekt verschiebe, funktioniert es.

Verwandte Themen