如何在spring @RestController中验证@QuerydslPredicate?

时间:2017-08-04 10:25:54

标签: java spring spring-mvc spring-data-rest spring-restcontroller

我正在使用spring-data-rest通过spring servlet公开数据库内容。使用@QuerydslPredicate可以通过HTTP GET发送过滤器,例如:

localhost:8080/persons?firstname=john&lastname=doe

问题:是否可以告诉Predicate验证规则?例如,特定字段可能不是null,例如姓氏?

@RestController
public class PersonServlet {
    @GetMapping("/persons")
    public Iterable<Person> getPersons(
            @QuerydslPredicate(root = Person.class) com.querydsl.core.types.Predicate predicate,
            Pageable pageable) {
        return dao.findAll(predicate, pageable);
    }

    @Entity     
    public class Person {
        private String firstname;
        private String lastname;
        private String age;
        //many more fields
    }
}

1 个答案:

答案 0 :(得分:0)

似乎没有办法验证例如QPerson.lastname != null

因此,我使用以下方法将@Valid Person添加为get参数并添加@NotNull等验证约束。

@RestController
public class PersonServlet {
    @GetMapping("/persons")
    public Iterable<Person> getPersons(
            @QuerydslPredicate(root = Person.class) com.querydsl.core.types.Predicate predicate,
            Pageable pageable,
            @Valid Person p) {
        return dao.findAll(predicate, pageable);
    }

    @Entity     
    public class Person {
        private String firstname;

        @NotNull
        private String lastname;

        private String age;
        //many more fields
    }
}