大佬教程收集整理的这篇文章主要介绍了java – jirutka / rsql-parser和QueryDSL,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有Spring框架创建的REST服务后端,现在我需要找到一种方法来处理来自前端的一些请求中的复杂过滤器.
我正在使用QueryDsl(v3.4.2)框架在整个后端进行查询构建.
我认为使用FIQL或Rsql解析器是最好的方法,所以我试图将jirutka/rsql-parser集成到我的后端项目中.
我是新手,也是QueryDsl.
现在我很困惑所以这是我的求助请求:
有人在之前的休息弹簧项目中集成了jirutka / rsql-parser和QueryDsl吗?如何?
Jirutka / rsql-parser文档只说:
并且有关于如何执行此操作的以下示例:
Node rootNode = new RsqlParser().parse("name==Rsql;version=ge=2.0");
rootNode.accept(yourShinyVisitor);
看起来很简单吧?
所以我像这样给我的访客打包:
public class RsqlParservisitor extends NoArgRsqlVisitorAdapter
实现了接口所需的所有方法.
这里我添加两个例子:
@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;
}
现在我被卡住了:
a)为了创建QueryDsl BooleanExpression,我需要知道我正在处理的类,例如:
QUser qUser = QUser.user;
BooleanExpression filter = qUser.firstName.eq("Bob");
要么
PathBuilder
b)当我测试我的代码时,它只执行公共的BooleanExpression访问(OrNode arg0)方法,然后什么也没有.它停在那里.
那一刻我做不了多少.无法创建BooleanExpression,因为我需要首先通过一些ComparisonNode方法然后使用“或”或“和”布尔表达式连接它们.对?
如果至少我可以通过所有节点,那么我可以设法找到通过课程的方法,我并不担心.但是不明白如何遍历所有节点,并且无法做到这一点.
任何解决此问题的指针都将非常感激.
找到了一种遍历所有节点的方法,并找到了一种方法来传递QueryDsl PathBuilder<?>对象的对象.
PathBuilder<?>是QueryDsl创建的所有QSomething类的父类.
现在我再次陷入寻找创建BooleanExpression的方法.
任何帮助将不胜感激.
我现在在我的服务中有以下内容:
@Override
public Page sqlFilters) {
Pageable pageable = new Pagerequest(pPage,pSize,pSort);
BooleanExpression filters = null;
Node queryTree;
try {
logger.debug("Parsing query: {}",pRsqlFilters);
queryTree = new RsqlParser().parse(pRsqlFilters);
RsqlParservisitor sqlParservisitor = new RsqlParservisitor sqlParservisitor,QUser.user);
} catch (TokenMgrError E) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RsqlParserException E) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Page
这在访客中:
public class RsqlParservisitor sqlVisitor<>>> {="" ...="" @override="" public="" booleanexpression="" visit(ornode=""?>> param)="" {="" todo="" auto-generated="" method="" stub="" string="" nombretmp="OrNode" ;="" printlogicalnode(nombretmp,node,param);="" return="" null;="" }="" @override="" public="" booleanexpression="" visit(equalnode=""?>> param)="" {="" todo="" auto-generated="" method="" stub="" string="" nombretmp="EqualNode" ;="" printcomparisonnode(nombretmp,param);="" return="" null;="" }="" ...="" public="" void="" printlogicalnode(string="" pnombrenodo,logicalnode=""?>> pparam)="" {="" logger.debug(pnombrenodo="" +="" ".="" node:="" "="" +="" pnode="" +="" ".="" param:="" "="" +="" pparam);="" logger.debug("operator:="" "="" +="" pnode.getoperator().name());="" for="" (node="" subnode="" :="" pnode)="" {="" logger.debug(pnombrenodo="" +="" ".="" subnode:="" "="" +="" subnode);="" subnode.accept(this,pparam);=""?><=========== this="" was="" the="" key="" to="" be="" able="" to="" traverse="" every="" node="" }="" }="" public="" void="" printcomparisonnode(string="" pnombrenodo,comparisonnode="">@H_673_119@> pparam)="" {="" logger.debug(pnombrenodo="" +="" ".="" node:="" "="" +="" pnode="" +="" ".="" param:="" "="" +="" pparam);="" logger.debug("selector:="" "="" +="" pnode.getselector());="" logger.debug("operator:="" "="" +="" pnode.getoperator());="" for="" (string="" argtmp="" :="" pnode.getarguments())="" {="" logger.debug(pnombrenodo="" +="" ".="" argtmp:="" "="" +="" argtmp);="" }="" }="" }=""?>
?>以上是大佬教程为你收集整理的java – jirutka / rsql-parser和QueryDSL全部内容,希望文章能够帮你解决java – jirutka / rsql-parser和QueryDSL所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。