2013-06-05 7 views
6

जब स्प्रे (स्प्रे.ओओ) एक अस्वीकृति उत्पन्न करता है, तो यह एक स्ट्रिंग बॉडी के साथ प्रतिक्रिया करता है। चूंकि मेरे सभी एपीआई क्लाइंट मान लेंगे कि मेरा एपीआई केवल जेसन लौटाता है, मैं वैश्विक स्तर पर प्रत्येक अस्वीकृति को एक वैध जेसन ऑब्जेक्ट बनाना चाहता हूं जो हमारे त्रुटि ऑब्जेक्ट प्रारूप के अनुरूप है। मैं यह कैसे कर सकता हूं?स्प्रे में कस्टम जेसन में सभी रिजेक्शन कैसे बदलूं?

त्रुटि वस्तु प्रारूप लग रहा है इस

{ 
    'details' : 'Something happened in the app. boooo!', 
    'errorType' : 'Unknown' 
} 

ERRORTYPE तरह UserNotFound और NeedPaidAccount

उत्तर

13

तरह मूल्यों के अपने आंतरिक enum शैली सूची है तो आप सिर्फ अपने कस्टम में अस्वीकृति के सभी चालू करना चाहते हैं जेसन प्रारूप, आप एक अस्वीकृति हैंडलर बना सकते हैं। उदाहरण के लिए, मैं इसे अपने ServiceActor में रखूंगा और निम्न कार्य करता हूं:

class ApiServiceActor extends Actor with HttpServiceActor with ApiServices { 
    def jsonify(response: HttpResponse): HttpResponse = { 
    response.withEntity(HttpBody(ContentType.`application/json`, 
     JSONObject(Map(
     "details" -> response.entity.asString.toJson, 
     "errorType" -> ApiErrorType.Unknown.toJson 
    )).toString())) 
    } 

    implicit val apiRejectionHandler = RejectionHandler { 
    case rejections => mapHttpResponse(jsonify) { 
     RejectionHandler.Default(rejections) 
    } 
    } 

    def receive = runRoute { 
    yourRoute ~ yourOtherRoute ~ someOtherRoute 
    } 
} 
+1

वर्तमान में ऐसा लगता है कि 'से PF' मौजूद नहीं है। 'अस्वीकृति हैंडलर {' इरादे के रूप में काम करता है। – dmitry

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