2016-03-07 11 views
12

डिफ़ॉल्ट मान के साथ, एक वैकल्पिक क्वेरी पैरामीटर की घोषणा करने के लिए उचित तरीका क्या है, जब compojure-api का उपयोग कर?वैकल्पिक क्वेरी पैरामीटर

मेरे मार्ग तत्वों में से एक (this पढ़ने के बाद) इस प्रकार है:

(GET "/:id/descendants" [id] 
    :return [d/CategoryTreeElement] 
    :path-params [id :- Long] 
    :query-params [context-type :- d/ContextType 
        levels :- Integer 
        {tenant :- d/Tenant :DEF_TENANT} 
        {show-future :- Boolean false} 
        {show-expired :- Boolean false} 
        {show-suppressed :- Boolean false} 
    :summary "Fetch category descendants" 
    (ok ...)) 

पहले बूलियन पैरामीटर जहां अन्य लोगों के रूप में परिभाषित (जैसे show-future Boolean), लेकिन उत्पन्न स्वैगर यूआई उन्हें एक बता गया के रूप में प्रस्तुत पर डिफ़ॉल्ट रूप से true मान के साथ। वर्तमान रूप में यूआई एक combobox दिखाता है जिसमें कोई विकल्प नहीं चुना गया है। किरायेदार के साथ भी यही होता है।

एक पक्ष सवाल: जब मैं स्वैगर उत्पन्न UI का उपयोग एक अनुरोध भेजने के लिए और त्रुटि दी है: "levels": "(not (instance? java.lang.Integer \"2\"))"। ऐसा क्यों है? क्या लाइब्रेरी को एपीआई द्वारा घोषित नामित प्रकारों में स्ट्रिंग मानों को कॉरर्स/कन्वर्ट करना नहीं है?

अग्रिम धन्यवाद।

उत्तर

5

अपने पहले अंक के लिए, यह तैयार किया गया है के रूप में काम कर रहा है। जब आप अपने बूलियन क्वेरी परम आवश्यक था, स्वैगर यूआई जो आप एक मूल्य का चयन करने के लिए मजबूर करता गाया (या तो true या false, यह सिर्फ होता है यह पहली जगह पर सही प्रदर्शित करता है कि)।

जब आप बूलियन क्वेरी परम बदल वैकल्पिक है, तो पहले खाली मान का अर्थ है "सब पर इस क्वेरी परम न भेजें" और जब आप true या false के लिए इसे बदल नहीं है यह इस संलग्न नहीं होंगे अनुरोध के लिए पूछे जाने वाले प्रश्न।

पूर्णांक क्वेरी परम के साथ अपने दूसरे अंक के बारे में: डिफ़ॉल्ट schema's json-coercion-matcher द्वारा निर्दिष्ट करता है String->Long coercion but not String->Integer तो वहाँ बॉक्स से बाहर Integer लिए कोई समर्थन नहीं है। आप :coercion विकल्प (there is an example in compojure-api test) का उपयोग करके अपने एपीआई के लिए या प्रति मार्ग विश्व स्तर पर अपनी खुद की coercer निर्दिष्ट कर सकते हैं। आप अपना खुद का कॉर्नर प्रदान कर सकते हैं जो मौजूदा json-coercion-matcherString->Integer मामले के साथ बढ़ा सकता है।

+0

आप के लिए धन्यवाद जवाब। तो बूलियन वैकल्पिक पैरामीटर के बारे में, इससे कोई फर्क नहीं पड़ता कि मैं डिफ़ॉल्ट मान को परिभाषित करता हूं, क्योंकि यूआई पर डिफ़ॉल्ट मान नहीं चुना जाता है। –

+1

@ matheus.emm यदि आप इसे वैकल्पिक बनाना चाहते हैं तो आपको डिफ़ॉल्ट पैरामीटर मान निर्दिष्ट करना होगा। अन्यथा स्वैगर यूआई आपको मानों में से एक ('true' या 'false') चुनने के लिए मजबूर करेगा और यदि आप उस क्वेरी पैरामीटर के लिए कोई मान निर्दिष्ट किए बिना अनुरोध भेजते हैं तो आपको स्कीमा सत्यापन त्रुटि मिल जाएगी। डिफ़ॉल्ट मान आवश्यक है, इसलिए आपके पैरामीटर में वैध मान असाइन किया गया है (आपकी स्कीमा के अनुसार) यदि यह कॉलर द्वारा प्रदान नहीं किया गया है। –

+0

@ matheus.emm मैंने जानकारी को 'इंटीगर' जबरन को संभालने के तरीके के साथ उत्तर अपडेट किया है। –

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