मैं वर्तमान में एक आरईएसटी एपीआई बना रहा हूं जिसमें मैं चाहता हूं कि क्लाइंट आसानी से किसी विशिष्ट इकाई के अधिकांश गुणों पर फ़िल्टर करें। QueryDSLSpring Data REST (an example by Oliver Gierke) के साथ संयोजन में उपयोग करने से मुझे गुणों का संदर्भ देने वाले क्वेरी पैरामीटर को जोड़कर फ़िल्टर करने की अनुमति देकर 90% तक आसानी से प्राप्त करने की अनुमति मिलती है (उदा। /users?firstName=Dennis&lastName=Laumen
)।क्या वसंत डेटा आरईएसटी के क्वेरीएसएलएल एकीकरण का उपयोग अधिक जटिल प्रश्नों के लिए किया जा सकता है?
मैं QuerydslBinderCustomizer
इंटरफ़ेस को लागू करके क्वेरी पैरामीटर और इकाई के गुणों के बीच मैपिंग को भी कस्टमाइज़ कर सकता हूं (उदाहरण के लिए असंवेदनशील खोज या आंशिक स्ट्रिंग मैचों के मामले में)। यह सब अच्छा है, हालांकि मैं यह भी चाहता हूं कि क्लाइंट रेंज का उपयोग करके कुछ प्रकार फ़िल्टर कर सकें। उदाहरण के लिए जन्म की तारीख जैसी संपत्ति के संबंध में मैं निम्नलिखित, /users?dateOfBirthFrom=1981-1-1&dateOfBirthTo=1981-12-31
जैसे कुछ करना चाहता हूं। यह संख्या आधारित गुणों के लिए जाता है, /users?idFrom=100&idTo=200
। मुझे लगता है कि QuerydslBinderCustomizer
इंटरफ़ेस का उपयोग करके यह संभव होना चाहिए लेकिन इन दोनों पुस्तकालयों के बीच एकीकरण बहुत व्यापक रूप से दस्तावेज नहीं किया गया है।
निष्कर्ष, क्या यह स्प्रिंग डेटा आरईएसटी और क्वेरीडीएसएल का उपयोग कर संभव है? यदि हां, तो कैसे?
धन्यवाद @ oliver-gierke! मुझे आपके द्वारा दिए गए उदाहरण के आधार पर काम करने के लिए मिला और कुछ और सशर्त तर्क जोड़ा गया ताकि अगर केवल एक तारीख दी जाती है तो इसे "से" तिथि के रूप में उपयोग किया जाता है। क्या आप कुछ और अतिरिक्त स्पष्टीकरण दे सकते हैं कि क्या यह * बाध्यकारी के लिए मौजूद अस्तित्व को जोड़ना भी संभव है? क्या स्प्रिंग डेटा आरईएसटी और क्वेरीडीएसएल का उपयोग करके "dateOfBirthFrom" क्वेरी पैरामीटर को जोड़ने का मेरा उदाहरण भी है? (बस उत्सुक, आपने पहले से ही मेरी समस्या हल की है! धन्यवाद!) –
@DennisLaumen "dateOfBirthFrom" शैली क्वेरी पैरामीटर सहायक हो सकता है। आपकी क्वेरी बाइंडिंग अनुकूलन मानती है कि यदि तारीख से ही उपयोग की जाने वाली केवल एक तारीख है, है ना? लेकिन सिर्फ एक तारीख का उपयोग करके फ़िल्टर करना संभव नहीं होगा। कोई सुझाव @ oliver-gierke? – gazal
@gazal, मैंने इसे निम्नलिखित कोड का उपयोग करके तय किया है, उम्मीद है कि यह मदद करता है। 'bindings.bind (Date.class) सब के सब ((DateTimePath पथ, संग्रह फैली दिनांक> मूल्य) -> { इटरेटर <फैली दिनांक> यह value.iterator() =;? दिनांक firstTimestamp = it.next(); अगर (it.hasNext()) { दिनांक secondTimestamp = it.next(); वापसी path.between (firstTimestamp, secondTimestamp); } else { वापसी path.after (firstTimestamp) ; } }); ' –