मेरे पास स्प्रिंग फ्रेमवर्क ने आरईएसटी सेवाओं को बैक-एंड बनाया है और अब मुझे फ्रंट एंड से कुछ अनुरोधों में जटिल फ़िल्टर को संसाधित करने का एक तरीका ढूंढना होगा।jirutka/rsql-parser और QueryDSL
मैं बैक एंड के दौरान क्वेरी निर्माण करने के लिए QueryDsl (v3.4.2) ढांचे का उपयोग कर रहा हूं।
मुझे लगता है कि एक FIQL या RSQL पार्सर का उपयोग करना सबसे अच्छा तरीका है, इसलिए मैं अपने बैक-एंड प्रोजेक्ट में jirutka/rsql-parser को एकीकृत करने की कोशिश कर रहा हूं।
मैं इसके लिए बहुत नया हूं और QueryDsl भी हूं।
अब मैं इसलिए यहाँ संदेह में हूँ मदद के लिए मेरे अनुरोध है:
किसी को भी एकीकृत jirutka/rsql-पार्सर और इससे पहले कि एक आराम वसंत परियोजना में QueryDsl है? और कैसे?
Jirutka/rsql-पार्सर प्रलेखन केवल कहते हैं:
नोड्स, दर्शनीय हैं तो पार्स एएसटी पार (और यह SQL क्वेरी शायद में कनवर्ट करें) करने के लिए, आपके द्वारा दी RSQLVisitor इंटरफ़ेस को लागू कर सकते हैं या सरलीकृत NoArgRSQLVisitorAdapter।
और यह कैसे करना है पर निम्न उदाहरण है:
Node rootNode = new RSQLParser().parse("name==RSQL;version=ge=2.0");
rootNode.accept(yourShinyVisitor);
बहुत आसान है, है ना लगता है?
तो मैं crated इस तरह अपने आगंतुक:
public class RsqlParserVisitor extends NoArgRSQLVisitorAdapter<BooleanExpression> {
सभी तरीकों इंटरफेस मुझे करने के लिए आवश्यक लागू।
@Override
public BooleanExpression visit(AndNode arg0) {
// TODO Auto-generated method stub
String methodNameTmp = "AndNode";
logger.debug(methodNameTmp + ". arg0: " + arg0);
logger.debug("operator: " + arg0.getOperator().name());
for (Node node : arg0) {
logger.debug(methodNameTmpp + ". node: " + node);
}
return null; //DO SOMETHING TO CREATE A BooleanExpression;
}
और
@Override
public BooleanExpression visit(EqualNode arg0) {
// TODO Auto-generated method stub
String methodNameTmp = "EqualNode";
logger.debug(methodNameTmp + ". arg0: " + arg0);
logger.debug("operator: " + arg0.getOperator());
for (String arg: arg0.getArguments()) {
logger.debug(methodNameTmp + ". arg: " + arg);
}
return null; //DO SOMETHING TO CREATE A BooleanExpression;
}
अब मैं अटक कर रहा हूँ:
यहाँ मैं दो उदाहरण जोड़ने
क) आदेश में एक QueryDsl BooleanExpression बनाने के लिए, मैं पता करने की जरूरत कक्षा मैं उदाहरण के लिए प्रसंस्करण कर रहा हूं:
QUser qUser = QUser.user;
BooleanExpression filter = qUser.firstName.eq("Bob");
या
PathBuilder<User> user = new PathBuilder<User>(User.class, "user");
BooleanExpression filter = user.getString("firstName").eq("Bob");
ख) जब मैं अपने कोड का परीक्षण, यह केवल public BooleanExpression visit(OrNode arg0)
विधि है, तो कुछ भी नहीं निष्पादित करता है। यह वहीं बंद हो जाता है।
उस पल में मैं ज्यादा कुछ नहीं कर सकता। अभी तक एक BooleanExpression नहीं बना सकता है, क्योंकि मुझे पहले कुछ तुलनानोड तरीकों से गुजरना है और फिर उन्हें "या" या "और" बूलियन अभिव्यक्ति के साथ शामिल होना चाहिए। सही?
यदि कम से कम मैं सभी नोड्स के माध्यम से जा सकता हूं, तो मैं कक्षा को पारित करने का एक तरीका ढूंढ सकता हूं, मैं इसके बारे में चिंतित नहीं हूं। लेकिन समझ में नहीं आता कि सभी नोड्स को कैसे पार किया जाए, और ऐसा करने में सक्षम नहीं हैं।
इसे ठीक करने के लिए कोई भी पॉइंटर्स, वास्तव में सराहना की जाएगी।
आप कभी भी इस के लिए एक पूर्ण समाधान मिला? मुझे इसके बारे में सुनना अच्छा लगेगा। –
मैंने अपना खुद का tweeking समाप्त हो गया ... और अब तक इतना अच्छा: यह काम कर रहा है। लेकिन हर समय और फिर मुझे काम नहीं करते समय चीजों को ठीक करने की ज़रूरत है; मुझे पता है कि यह सही नहीं है। यदि आपके पास विशिष्ट प्रश्न हैं तो मैं खुशी से मदद करूंगा। मुझे उम्मीद है कि कुछ समय जल्द ही मुझे कुछ खाली समय मिलेगा (हा हा) और यहां कुछ पॉइंटर्स डाल सकते हैं, लेकिन कुछ भी वादा नहीं कर सकते। :) – elysch