0

我使用spring-data-rest来通过spring servlet公开数据库内容。使用@QuerydslPredicate用于能够通过HTTP GET发送过滤器,如:如何在@RestController中验证@QuerydslPredicate?

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 
    } 
} 

回答

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 
    } 
}