进行了一些重要的挖掘,以确定使用query-dsl的spring-data-rest可以让REST API客户端轻松过滤实体的大多数属性.
这个问题也很有用: Spring Data REST的QueryDSL集成可用于执行更复杂的查询吗?
正如Dennis Laumen已经提到的那样,QueryDslPredicateExecutor并QuerydslBinderCustomizer提供一些壮观的功能,但缺乏文档.
我试图破解的具体功能是:
我有一个User实体,其中@ManyToMany映射到UserGroup实体
public class User {
@Id
@GeneratedValue
private Long id;
@Column(name = "user_name")
private String username;
@ManyToMany
@JoinTable(name = "fs_user_group_map", joinColumns = { @JoinColumn(name = "user_id") }, inverseJoinColumns = { @JoinColumn(name = "group_id") })
private List<UserGroup> userGroups;
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试获取所有用户,其userGroup的名称之一应与文本匹配:
所以我想要的URI是: /users?userGroups.name=Admin
但是这个错误了.
19:08:04.423|ERROR|o.s.d.r.w.RepositoryRestExceptionHandler|null
java.lang.NullPointerException: null
at org.springframework.util.ReflectionUtils.getField(ReflectionUtils.java:143) ~[spring-core-4.2.4.RELEASE.jar:4.2.4.RELEASE]
at org.springframework.data.querydsl.binding.QuerydslPredicateBuilder.reifyPath(QuerydslPredicateBuilder.java:185) ~[spring-data-commons-1.11.2.RELEASE.jar:na]
at org.springframework.data.querydsl.binding.QuerydslPredicateBuilder.reifyPath(QuerydslPredicateBuilder.java:188) ~[spring-data-commons-1.11.2.RELEASE.jar:na]
at org.springframework.data.querydsl.binding.QuerydslPredicateBuilder.getPath(QuerydslPredicateBuilder.java:167) ~[spring-data-commons-1.11.2.RELEASE.jar:na]
at org.springframework.data.querydsl.binding.QuerydslPredicateBuilder.invokeBinding(QuerydslPredicateBuilder.java:136) ~[spring-data-commons-1.11.2.RELEASE.jar:na]
at org.springframework.data.querydsl.binding.QuerydslPredicateBuilder.getPredicate(QuerydslPredicateBuilder.java:111) ~[spring-data-commons-1.11.2.RELEASE.jar:na]
at org.springframework.data.rest.webmvc.config.QuerydslAwareRootResourceInformationHandlerMethodArgumentResolver.postProcess(QuerydslAwareRootResourceInformationHandlerMethodArgumentResolver.java:91) ~[spring-data-rest-webmvc-2.4.2.RELEASE.jar:na]
at …Run Code Online (Sandbox Code Playgroud) spring querydsl spring-data spring-data-jpa spring-data-rest