2017-12-21 31 views
1

JsValueをカスタムクラスに変換するには、このコードを使用します。scala暗黙的にパラメータに渡す

def Foo(today : String):String = { 
    implicit def read (js: JsValue) : Reads[ResponseBasicModel[String]] = Reads[ResponseBasicModel[String]](
     js => JsSuccess(ResponseBasicModel[String](
     ReturnValue = js.\("ReturnValue").toString() 
     ) 
    ) 
    ) 

    CallAPI[ResponseBasicModel[String]](
     "GET", 
     "URL" 
     ,15.second).ReturnValue 
    } 

CallAPI:

def CallAPI[A](httpMethod: String, subURL: String, timeout: FiniteDuration)(implicit m: scala.reflect.Manifest[A], read: Reads[A]) :A = { 
/... 
    Json.parse(robots.toString()).as[A] 
} 

しかし、それはエラー

Error:(20, 47) No Json deserializer found for type finance.remittance.data.ResponseBasicModel[String]. Try to implement an implicit Reads or Format for this type. return CallAPI[ResponseBasicModel[String]](

を返す任意の解決策はありますか?

+0

'return'は、[読み込み]私はあなただけ伸ばすことができると思うfunctionnal Scalaの – cchantep

答えて

0

Iこのコードでこの問題を解決しました。

私は書き込み機能を使用しないため、書き込みはnullです。

def Foo(today : String):String = { 
    implicit object ResponseBasicModelFormat extends Format[ResponseBasicModel[String]]{ 
    def reads(js: JsValue) =JsSuccess(ResponseBasicModel[String](
     ReturnValue = js.\("ReturnValue").toString() 
    )) 
    def writes(res : ResponseBasicModel[String]): JsValue=null 
    } 

    CallAPI[ResponseBasicModel[String]](
     "GET", 
     "URL" 
     ,15.second).ReturnValue 
    } 
+1

に無用です(https://www.playframework.com/documentation/2.6.x/api/scala/index.html#play .api.libs.json.Reads)の代わりに、 'Format'をダミーの' writes'メソッドで置き換えます。 –

関連する問題