2012-05-07 10 views
7

का प्रारूप नहीं मिल रहा है यह मेरा खोजें वस्तु है:Play2 मेरी निहित पढ़ता है या JSON

package models.helper 
import play.api.libs.json.Format 
import play.api.libs.json.JsValue 
import play.api.libs.json.JsObject 
import play.api.libs.json.JsString 

case class Search (name: String, `type`:String){ 

    implicit object SearchFormat extends Format[Search] { 
    def reads(json: JsValue): Search = Search(
     (json \ "name").as[String], 
     (json \ "type").as[String] 
    ) 

    def writes(s: Search): JsValue = JsObject(Seq(
     "name" -> JsString(s.name), 
     "type" -> JsString(s.`type`) 
    )) 
    } 
} 

मैं जब एक वेब सेवा बुला WS का उपयोग कर OT उपयोग इस वर्ग के कोशिश कर रहा हूँ:

val search = response.json.as[Search] 

लेकिन स्कैला कंपाइलर इस लाइन पर शिकायत करता रहता है:

कोई जेसन deserializer प्रकार model.helper.Search के लिए नहीं मिला। को इस प्रकार के लिए एक अंतर्निहित रीड या प्रारूप लागू करने का प्रयास करें।

क्या कोई मुझे बता सकता है कि मैं क्या गलत कर रहा हूं?

उत्तर

21

दरअसल उदाहरण गलत है। निहित क्षेत्र में उपलब्ध होने के लिए आपको अपने अंतर्निहित Format[Search] मान की आवश्यकता है।

अपने मामले Format[Search] में वर्ग Search की एक नेस्टेड मूल्य के रूप में परिभाषित किया गया है, तो आप इसे केवल Search का एक उदाहरण से पहुँच सकते हैं।

तो, आप इसे एक और स्थान पर परिभाषित करना चाहते हैं, जहां इसे Search, उदाहरण के बिना संदर्भित किया जा सकता है। एक Formats वस्तु में:

object Formats { 
    implicit SearchFormat extends Format[Search] { 
    … 
    } 
} 

तो फिर तुम यह इस प्रकार के रूप में उपयोग कर सकते हैं:

import Formats.SearchFormat 
val search = response.json.as[Search] 

तुम भी Search का साथी वस्तु में Format[Search] मूल्य को परिभाषित करते हुए आयात कर से छुटकारा पा सकते कक्षा। दरअसल स्काला संकलक स्वतः प्रकार पैरामीटर के साथी वस्तुओं में लग रहा है जब यह एक दिए गए प्रकार का एक अंतर्निहित मूल्य की जरूरत है:

val search = response.json.as[Search] 
: यह आयात करने के लिए बिना

case class Search(name: String, `type`: String) 

object Search { 
    implicit object SearchFormat extends Format[Search] { 
    … 
    } 
} 

तो फिर तुम उपयोग कर सकते हैं

संबंधित मुद्दे