代码之家  ›  专栏  ›  技术社区  ›  Anush

从QueryDSL谓词对象中获取参数

  •  5
  • Anush  · 技术社区  · 7 年前

    我使用带有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);
    
    }
    

    学生班级包含 学生ID 学生姓名 属性;

    现在,如果有人调用 https://hostname/ {subjectId}/学生?学生ID=1234(&studentName=测试

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

    1 回复  |  直到 7 年前
        1
  •  3
  •   pvpkiran    7 年前

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

    predicate.toString(); ---&燃气轮机;这将打印用户。学生ID=1234(&&使用者studentName=测试
    由此,可以进行字符串拆分。

    另一种方法是

    predicate.getClass()); ----&燃气轮机;这将为您提供如下类名

    com.querydsl.core.types.PredicateOperation (如果有多个查询条件)

    com.querydsl.core.types.dsl.BooleanOperation (如果是单个查询条件)。

    有了它,您可以将谓词类型化为相应的类型,然后执行以下操作 getArgs()