Spring boot 从QueryDSL搜索中筛选结果

Spring boot 从QueryDSL搜索中筛选结果,spring-boot,spring-data-rest,querydsl,Spring Boot,Spring Data Rest,Querydsl,我使用QueryDSL作为SpringDataREST的一部分,从API中搜索实体 是否有可能以某种方式过滤搜索API,以便在默认情况下不会找到例如“停用”的汽车实体 目前,我在汽车实体上有一个标志,当它设置为true时,它不应该通过我们的搜索API公开,并且应该将具有此属性集的汽车排除在搜索之外 在使用Spring数据REST和QueryDSL的情况下,要更改查询的标准行为,我们可以使用方面 例如:我们需要在默认情况下仅显示其标志设置为true的模型s: @数据 @诺尔格构装师 @实体 公共类

我使用QueryDSL作为SpringDataREST的一部分,从API中搜索实体

是否有可能以某种方式过滤搜索API,以便在默认情况下不会找到例如“停用”的汽车实体

目前,我在汽车实体上有一个标志,当它设置为true时,它不应该通过我们的搜索API公开,并且应该将具有此属性集的汽车排除在搜索之外


在使用Spring数据REST和QueryDSL的情况下,要更改查询的标准行为,我们可以使用方面

例如:我们需要在默认情况下仅显示其
标志设置为
true
模型
s:

@数据
@诺尔格构装师
@实体
公共类模型{
@Id@GeneratedValue私有整数Id;
@非空私有字符串名称;
私有布尔标志;
}
在这种情况下,我们实现如下方面:

@方面
@组成部分
公共类模型方面{
@切入点(“执行(*com.example.ModelRepo.findAll(com.querydsl.core.types.Predicate,org.springframework.data.domain.Pageable)))
public void ModelFindAllWithPredicteandPageable(){
}
@周围(“modelFindAllWithPredicateAndPageable()”)
公共对象FilterModelByFlag(最终过程接合点pjp)抛出可丢弃{
对象[]args=pjp.getArgs();
谓词=(谓词)参数[0];
布尔表达式flagIsTrue=QModel.model.flag.eq(true);
if(谓词==null){
args[0]=flagIsTrue;
}否则{
如果(!predicate.toString()包含(“model.flag”)){
args[0]=flagIsTrue.and(谓词);
}
}
返回pjp。继续(args);
}
}

此方面截取我们的repo的方法
findAll(谓词谓词,Pageable-Pageable)
的所有调用,如果请求参数未设置(
谓词==null
),或者如果它们不包含“flag”参数,则将过滤器
model.flag=true
添加到查询中。否则aspect不会修改原始的
谓词

-请提供一些代码(域对象、存储库和任何相关代码示例的示例)、输入查询和预期结果。谢谢,这正是我想要的。我必须测试一下,但逻辑似乎正是我想要的。我一试你的答案,就标上接受。非常感谢。由于QueryDSL PredicateExecutor不提供访问最终谓词的方法,并且Spring Security PostFilter在pageable上不起作用,因此这实际上是从QueryDSL repo筛选结果的唯一方法。非常感谢。