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 (पी .पीआरपीसीपीआरसीई.एओएआरएलएलएस (कोई नहीं)),  

पहले से धन्यवाद, राक

आपके कोड में दो समस्याएं हैं:

  1. उत्पाद का प्रकार कुछ [उत्पाद] वेल प्रॉड का उपयोग करें: विकल्प [उत्पाद] = ...

  2. आपको विकल्प-लेखन का उपयोग करना होगा: 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

Popular posts from this blog

java - Can't add JTree to JPanel of a JInternalFrame -

javascript - data.match(var) not working it seems -

javascript - How can I pause a jQuery .each() loop, while waiting for user input? -