java - 从 QueryDSL 谓词对象中获取参数

标签 java spring rest predicate querydsl

我使用带有 spring REST 端点的 QueryDSL 谓词对象来检索和查询参数值。

@GetMapping("/{subjectId}/students")
@RolesAllowed( {Roles.PLATFORM_ADMIN, Roles.USER})
public List<StudentResponse> getAllStudents(@PathVariable final String subjectId,                                
                                      @QuerydslPredicate(root = Student.class) final Predicate predicate) {     

        final Predicate searchPredicate = studentPredicate()
                .predicate(predicate)
                .subjectId(subjectId)
                .build();
        return studentService.findBySubjectId(subjectId, searchPredicate);

}

student类包含studentIdstudentName属性;

现在,如果有人调用 https://hostname/ {subjectId}/students?studentId=1234&studentName=test

然后上面的代码生成带有参数值的谓词对象。但是除了数据库查询之外,我需要从谓词对象中获取超过 2 个参数值以进行进一步处理。我没有从谓词对象中看到任何支持方法来检索值。那我该怎么做呢?

最佳答案

没有直接的方法可以做到这一点。
但是你可以试试这个。

predicate.toString(); ---> 这将打印 user.Studentid=1234 && user.studentName=test
由此,您可以进行字符串拆分。

另一种方式是用

predicate.getClass()); ----> 这会给你类似的类名

class com.querydsl.core.types.PredicateOperation(在多个查询条件的情况下)

class com.querydsl.core.types.dsl.BooleanOperation(在单个查询条件的情况下)。

有了这个,您可以将谓词类型转换为相应的类型,然后执行 getArgs()

关于java - 从 QueryDSL 谓词对象中获取参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49146185/

相关文章:

java - 即使没有 "mapping"也使用 Java HashMap ?

java - Ljava.lang.StackTraceElement 调试 Android 应用程序

java - LazyList.decorate - 实例化工厂 : The constructor must exist and be public exception

java - Spring messageSource 只能作为 xml 工作(不能作为 Spring-Java-Config)

java - TableColumnExt 不尊重原型(prototype)值

java - 以 TreeMap<K, V> 作为参数的简单泛型方法

java - Spring-Data-JPA - 将一条记录插入数据库后无限递归

c# - WCF REST 推送流服务

rest - 在网页中呈现 ActivePivot

python - Django序列化器不将数据保存到数据库但响应正常