Non-implicit Writes can't deal with Option (Scala, JSON, Play 2.3.6) -
मेरी इस तरह एक केस क्लास है:
केस वर्ग उत्पाद (ean: long, नाम: स्ट्रिंग, विवरण: स्ट्रिंग, खरीद मूल्य: विकल्प [बिगडीकिलल] = कोई नहीं, विक्रय मूल्य: विकल्प [बिगडीकिल] = कोई नहीं)
और मेरे पास इस तरह एक गैर-निहित लेखन है: [स्ट्रिंग]>
और तो मेरे पास है विकल्प का एक उदाहरण [उत्पाद]:
val prod = कुछ (उत्पाद (5018206244611 एल, "ज़ेबरा पेपरक्लिप्स", "ज़ेबरा लंबाई 28 मिमी घोषित 150 पैक"))
जब मैंने इसे क्रमबद्ध करने की कोशिश की ...:
val jsonStr = Json.toJson (prod) (adminProductWrites)
मुझे एक त्रुटि मिली इस तरह से:
& lt; कंसोल & gt;: 21: गलती करें या: प्रकार बेमेल; पाया: play.api.libs.json.owrites [उत्पाद] आवश्यक: play.api.libs.json.Writes [कुछ [उत्पाद]] val jsonStr = Json.toJson (prod) (adminProductWrites)
तो, पहले (केवल तुलना के लिए) मैंने यह कोशिश की:
val jsonStr = Json.toJson (prod.get) (adminProductWrites)
यह काम करता है:
jsonStr: play.api.libs.json.JsValue = { "EAN": 5018206244611, "नाम": "ज़ेबरा पेपर क्लिप", "description": "ज़ेबरा लंबाई 28 मिमी असवर्टेड 150 पैक "}
लेकिन मैं ऐसा नहीं करना चाहता (कॉलिंग)। मुझे ऐसा करने के लिए जिस तरह से लिखा जाता है, उसे काम करने की ज़रूरत है:
अंतर्निहित ऑब्जेक्ट उत्पादक लेख लिखित विस्तार [उत्पाद] {def लिखते हैं (पी: उत्पाद) = Json.obj ("ean" - & gt; जेसन। टोजसन (पी.ई.एन.), "नाम" - & gt; जेएसन। टोजसन (पी.नाम), "विवरण" - & gt; जेएसन। टोजसन (पी। डीसीकेशन))}
(उस अंतर्निहित लेखन के साथ, यह पंक्ति कार्य करती है):
scala & gt; वैल jsonStr = Json.toJson (prod) jsonStr: play.api.libs.json.JsValue = { "EAN": 5018206244611, "नाम": "ज़ेबरा पेपर क्लिप", "description": "ज़ेबरा लंबाई 28 मिमी मिश्रित 150 पैक"}
मुझे क्या याद आ रहा है?
अतिरिक्त नोट:
मेरा अंतर्निहित लेखन अपूर्ण है, मैंने जानबूझ कर पिछले 2 क्षेत्रों को हटा दिया है ( खरीदप्रिस और विक्रय मूल्य) कारण: यह कोड संकलित नहीं करता है:
अंतर्निहित ऑब्जेक्ट उत्पादक लेख लिखित विस्तार प्रदान करता है [उत्पाद] {डीईएफ़ लिखता है (पी: उत्पाद) = जेसन.ओबजे ("ईन" - & gt; जेसन। टोजसन (p.ean), "नाम" - & gt; Json.toJson (p.name), "विवरण" - & gt; Json.toJson (p.description), "purchase_price" - & gt; p.purchasePrice.getOrElse (कोई नहीं) , "विक्रय_प्रिस" - & gt; p.sellingprice.getOrElse (कोई नहीं))
}
मैं यह त्रुटि देता है:
& Lt; कंसोल & gt;: 24: त्रुटि: सीरियलजेज के प्रकार के लिए कोई जेसन सीरियललाइज़र नहीं मिला। इस प्रकार के लिए एक अंतर्निहित लेखन या प्रारूप को लागू करने की कोशिश करें। "क्रय_प्रिस" - & gt; Json.toJson (पी .पीआरपीसीपीआरसीई.एओएआरएलएलएस (कोई नहीं)),
पहले से धन्यवाद, राक
आपके कोड में दो समस्याएं हैं:
-
उत्पाद का प्रकार
कुछ [उत्पाद]
।वेल प्रॉड का उपयोग करें: विकल्प [उत्पाद] = ...
-
आपको विकल्प-लेखन का उपयोग करना होगा:
Json.toJson (prod ) (Writes.OptionWrites (adminProductWrites))
। यदि आप अंतर्निहित लेखन का उपयोग करते हैं, तो कंपाइलर द्वारा कोड उत्पाद बिल्कुल वही है (OptionWrites का उपयोग भी)।
scala> val prod: विकल्प [उत्पाद] = कुछ (उत्पाद (5018206244611L, "ज़ेबरा पेपर क्लिप", "ज़ेबरा लंबाई 28 मिमी मिश्रित 150 पैक")) prod: विकल्प [उत्पाद] = कुछ (उत्पाद (5018206244611, ज़ेबरा पेपर क्लिप, ज़ेबरा की लंबाई 28 मिमी मिश्रित 150 पैक, कोई नहीं, कोई नहीं)) स्केला> Json। Toxson (prod) (लिखता है। ऑप्शनवर्इट्स (adminProductWrites)) res2: play.api.libs.json.JsValue = {"ean": 5018206244611, "नाम": "ज़ेबरा पेपरक्लिप्स", "विवरण": "ज़ेबरा लंबाई 28 मिमी घोषित 150 पैक "} स्केला> वैल prod: विकल्प [उत्पाद] = कोई नहीं prod: विकल्प [उत्पाद] = कोई नहीं स्केला> Json.toJson (prod) (Writes.OptionWrites (adminProductWrites)) res3: play.api.libs.json.JsValue = रिक्त
Comments
Post a Comment