2012-11-23 6 views
8

के लिए मिला मैं कोड की निम्नलिखित पंक्तियों पर काम कर रहा हूं। 51:: नहीं Json deserializer प्रकार java.util.Date के लिए मिलाकोई जेसन deserializer प्रकार java.util.Date

val list = Car.getNames() 
Ok(Json.toJson(list)) 

मैं निम्न त्रुटियों ....

[त्रुटि] my_app/ऐप्स/मॉडल/Car.scala मिला है। इस प्रकार के लिए एक अंतर्निहित रीड या प्रारूप को लागू करने का प्रयास करें।

Car मानकों में से एक के रूप में java.util.date वस्तु है और मैं कार्यान्वित पढ़ता है और लिखताimport play.api.libs.json.* के बाद से java.util.date वस्तु का समर्थन करने के लिए इसे समर्थन नहीं करता।

क्या आप मेरी गलतियों को इंगित करेंगे?

implicit object CarFormat extends Format[Car] { 

    def reads(json: JsValue): Car = Car(
     (json \ "id").as[Long], 
     (json \ "height").as[Double], 
     (json \ "weight").as[Double], 
     (json \ "date").asOpt[java.util.Date] 
    ) 

    def writes(car: Car) = 
     JsObject(
      Seq(
       "id" -> JsString(car.id.toString), 
       "height" -> JsString(car.height.toString), 
       "weight" -> JsString(car.weight.toString), 
       "date" -> JsString(car.date.toString) 
      ) 
     ) 
} 
+0

मैं सुझाव है कि आप java.util.Date का उपयोग नहीं करते - जैसे Joda दिनांक समय के रूप में एक बेहतर तारीख वर्ग का उपयोग करें। यहां https://github.com/jorgeortiz85/scala-time – Phil

+0

के लिए एक स्कैला रैपर है, मुझे देर से प्रतिक्रिया के बारे में खेद है और मुझे आपकी टिप्पणी से सटीक परिणाम मिल गया है। धन्यवाद :) – Masashi

उत्तर

11

आप केवल Car के लिए Format परिभाषित लेकिन यह java.util.Date के लिए एक Format की आवश्यकता है। इस प्रयास करें:

import play.api.libs.json._ 

case class Car(id:Long, height:Double, weight:Double, date:Option[java.util.Date]) 

implicit object CarFormat extends Format[Car] { 

    implicit object DateFormat extends Format[java.util.Date] { 
    val format = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss") 
    def reads(json:JsValue): java.util.Date = format.parse(json.as[String]) 
    def writes(date:java.util.Date) = JsString(format.format(date)) 
    } 

    def reads(json: JsValue): Car = Car(
    (json \ "id").as[Long], 
    (json \ "height").as[Double], 
    (json \ "weight").as[Double], 
    (json \ "date").asOpt[java.util.Date] 
) 

    def writes(car: Car) = 
    JsObject(
     Seq(
      "id" -> JsString(car.id.toString), 
      "height" -> JsString(car.height.toString), 
      "weight" -> JsString(car.weight.toString), 
      "date" -> JsString(car.date.toString) 
     ) 
    ) 
} 
+0

मुझे देर से प्रतिक्रिया के बारे में खेद है क्योंकि अब तक मुझे यह इनबॉक्स नहीं मिल सका जो बहुत बेवकूफ है लेकिन मैं आपकी टिप्पणी के लिए बहुत बहुत धन्यवाद :) – Masashi

+0

क्या हम इस कोड को मॉडल में डालते हैं? धन्यवाद। – mythicalprogrammer

+2

स्कैला में @mythicalprogrammer, आप कहीं भी निहित परिभाषा डाल सकते हैं, बस इसे उस क्षेत्र में लाएं जहां आपको इसकी आवश्यकता है। – xiefei

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

  • कोई संबंधित समस्या नहीं^_^