मैं scalatra उपयोग कर रहा हूँ करने के लिए "निर्यात" JSON करने के लिए एक MongoDB डेटा, अपने कार्यों की तरह, बहुत सरल कर रहे हैं:किसी भी स्केलेट्रा एक्शन में सभी त्रुटियों को कैसे पकड़ें?
get("/") {
val title = db.get_collection("main", "api", "title")
send_json(title)
}
मैं एक HTTP त्रुटि और संदेश भेजने के लिए अगर कुछ गलत हो जाते हैं, दूसरी तरफ चाहते इसे उपयोगकर्ता के लिए कुछ अर्थ में परिवर्तित कर दिया जाएगा। तो विधि becames:
get("/") {
try {
val title = db.get_collection("main", "api", "title")
send_json(title)
} catch {
case e:java.util.NoSuchElementException => send_error("DB malformed", InternalError)
case e:com.mongodb.MongoException => send_error("Can not connect to MongoDB", InternalError)
case e => send_error("Internal Error", InternalError)
}
}
कोशिश पकड़ है कि वास्तविक विधि बड़ा है और मैं हर विधि, वर्ग पहली नजर में बनने की कोशिश पकड़ने का एक बदसूरत संग्रह के लिए यह करने के लिए की जरूरत है। बुरी दिखने और विचलित करने से बचने का कोई तरीका है पूरे कोड को पकड़ने का प्रयास करें? मैं स्कैला (और जावा बीटीडब्लू) के लिए नया हूं इसलिए मुझे लगता है कि मुझे कुछ याद आ रहा है।
मैं डीबी ऑब्जेक्ट JSON भेजने के लिए नहीं चाहता, इसलिए db.get_collection विधि पर प्रयास करने का प्रयास एक विकल्प नहीं है।
मेरा अंतिम समाधान था: 'वैल errorHandling: PartialFunction [फेंकने योग्य, यूनिट] = {' अगर मैं errorHandler उपयोग करते हैं, मैं ओवरराइड करने की आवश्यकता है कि नाम के बारे में त्रुटि मिला है। यह java.lang की भी आवश्यकता है। अपवाद – user1216071
@ user1216071 ठीक है, मैंने कोड को तदनुसार तय किया है, इसलिए दूसरों को इसे समझना नहीं होगा (यदि वे आपकी टिप्पणी को याद करते हैं)। –