5

Es wurden umfangreiche Untersuchungen durchgeführt, um herauszufinden, dass REST API-Clients mit feder-data-rest mit query-dsl problemlos die meisten Eigenschaften einer Entität filtern können.Spring Data RESTs QueryDSL-Integration für die Abfrage von Untereigenschaften der Auflistungszuordnung in einer Entität

Diese Frage war auch nützlich: Can Spring Data REST's QueryDSL integration be used to perform more complex queries?

Als Dennis Laumen bereits erwähnt, QueryDslPredicateExecutor und QuerydslBinderCustomizer einige spektakuläre Funktionen bieten aber Dokumentation fehlt.

Die spezifische Funktion, die ich zu knacken bin versucht:

ich eine Benutzereinheit mit @ManyToMany Mapping Usergroup Einheit

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

Ich versuche, haben alle Benutzer eines ihrer usergroup des holen Name sollte einen Text entsprechen:

So ist die URI ich versuche zu schlagen: /users?userGroups.name=Admin

Aber diese Fehler aus.

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 org.springframework.data.rest.webmvc.config.RootResourceInformationHandlerMethodArgumentResolver.resolveArgument(RootResourceInformationHandlerMethodArgumentResolver.java:92) ~[spring-data-rest-webmvc-2.4.2.RELEASE.jar:na] 
    at org.springframework.data.rest.webmvc.config.RootResourceInformationHandlerMethodArgumentResolver.resolveArgument(RootResourceInformationHandlerMethodArgumentResolver.java:40) ~[spring-data-rest-webmvc-2.4.2.RELEASE.jar:na] 
    at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:78) ~[spring-web-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
    at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:162) ~[spring-web-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:129) ~[spring-web-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) ~[spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:814) ~[spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:737) ~[spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) ~[spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) ~[spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) ~[spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:969) [spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:860) [spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:687) [javax.servlet-api-3.1.0.jar:3.1.0] 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845) [spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [javax.servlet-api-3.1.0.jar:3.1.0] 
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812) [jetty-servlet-9.2.14.v20151106.jar:9.2.14.v20151106] 

Einige Debugging um QuerydslPredicateBuilder.reifyPath mich zu verstehen, dass ein Nutzergruppen ListPath ist, und es ist ein Versuch, Reflexion zu verwenden, um die Eigenschaft ‚Name‘ auf, es zu finden. Aber der Query-dsl-Pfad, den ich tatsächlich benötigen würde, ist user.userGroups.any().name

Der Versuch, eine andere Syntax auf der URL obwohl scheint nicht als gültig PropertyPath in QuerydslPredicateBuilder.getPredicate anerkannt werden.

Ist das ein Fehler?

+0

jedes Update dazu? – chrismarx

+0

nop, ich hatte gehofft, dass jemand aus dem Team von spring-data klarstellt – gazal

+0

Ich schätze, wir müssen hier vielleicht beitragen: https://github.com/spring-projects/spring-data-jpa – gazal

Antwort

0

In meinem Fall hat die Aktualisierung auf Feder-Daten Ingalls-SR7 dieses Problem behoben.

Verwandte Themen