Получить параметры из объекта предиката QueryDSL

Я использую объект предиката QueryDSL с конечной точкой Spring REST для получения и запроса значений параметров.

@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);

}

Студенческий класс содержит атрибуты studentId и studentName;

Теперь, если кто-то вызовет https://hostname/ {subjectId} / student? StudentId = 1234 & studentName = test

Затем приведенный выше код генерирует объект предиката со значениями параметров. Но мне нужно получить более двух значений параметров из объекта предиката для дальнейшей обработки, помимо запроса db. Я не вижу никакого вспомогательного метода от объекта предиката для извлечения значений. Так как я могу это сделать?


person Anush    schedule 07.03.2018    source источник


Ответы (1)


Простого способа сделать это не существует.
Однако вы можете попробовать это.

predicate.toString(); ---> Это напечатает user.Studentid = 1234 && user.studentName = test
Из этого вы можете выполнить разделение строки.

Другой способ - с

predicate.getClass()); ----> Это даст вам имя класса, например

класс com.querydsl.core.types.PredicateOperation (в случае более одного условия запроса)

класс com.querydsl.core.types.dsl.BooleanOperation (в случае единственного условия запроса).

С его помощью вы можете привести предикат к соответствующему типу, а затем выполнить getArgs().

person pvpkiran    schedule 07.03.2018