从 QueryDSL 谓词对象中获取参数
Get parameters out from QueryDSL Predicate Object
我使用带有 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 Class 包含 studentId 和 studentName 属性;
现在,如果有人调用 https://hostname/{subjectId}/students?studentId=1234&studentName=test
然后上面的代码生成带有参数值的谓词对象。但是除了数据库查询之外,我需要从谓词对象中获取超过 2 个参数值以进行进一步处理。我没有从谓词对象中看到任何支持方法来检索值。那我该怎么做呢?
没有直接的方法可以做到这一点。
但是你可以试试这个。
predicate.toString();
---> 这将打印 user.Studentid=1234 && user.studentName=test
由此,您可以进行字符串拆分。
另一种方法是
predicate.getClass());
----> 这将为您提供 class 名称,如
class com.querydsl.core.types.PredicateOperation
(查询条件不止一个时)
class com.querydsl.core.types.dsl.BooleanOperation
(单条查询条件)。
有了这个,你可以将谓词强制转换为相应的类型,然后执行 getArgs()
。
我使用带有 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 Class 包含 studentId 和 studentName 属性;
现在,如果有人调用 https://hostname/{subjectId}/students?studentId=1234&studentName=test
然后上面的代码生成带有参数值的谓词对象。但是除了数据库查询之外,我需要从谓词对象中获取超过 2 个参数值以进行进一步处理。我没有从谓词对象中看到任何支持方法来检索值。那我该怎么做呢?
没有直接的方法可以做到这一点。
但是你可以试试这个。
predicate.toString();
---> 这将打印 user.Studentid=1234 && user.studentName=test
由此,您可以进行字符串拆分。
另一种方法是
predicate.getClass());
----> 这将为您提供 class 名称,如
class com.querydsl.core.types.PredicateOperation
(查询条件不止一个时)
class com.querydsl.core.types.dsl.BooleanOperation
(单条查询条件)。
有了这个,你可以将谓词强制转换为相应的类型,然后执行 getArgs()
。