1

First off, wird dies Spring Data Rest: How to search by another object's key? bezogen, die in https://jira.spring.io/browse/DATAREST-502Spring Data Rest: geben Sammlung <Entity> als Query-String-Parameter

Mein Problem behoben zu sein scheint ist (glaube ich) und Erweiterung dieser. Ich sehe das folgende Verhalten:

  1. Ich habe zwei Repository Abfragen z.

    Person findByAccount(@Param("account") Account account)); 
    
    Collection<Person> findByAccountIn(@Param("accounts") Collection<Account> accounts)); 
    
  2. Beide Suchmethoden sind über Feder-Daten-Rest ausgesetzt. Ich kann den ersten Zugriff auf eine URL wie http://localhost:8080/people/search/findByAccount?account=http://localhost:8080/accounts/1
  3. ich das zweite Verfahren unter Verwendung einer URL wie http://localhost:8080/people/search/findByAccountIn?accounts=http://localhost:8080/accounts/1 zugreifen kann, aber wenn ich versuche, in mehrere Konten zu übergeben, wie

    http://localhost:8080/people/search/findByAccountIn?accounts=http://localhost:8080/accounts/1,http://localhost:8080/accounts/2, 
    

    Es läuft die Abfrage außer das erste Konto (http://localhost:8080/accounts/1) IGNORE und nur auf die zweiten (http://localhost:8080/accounts/2)

    basierte Suche

Was für das Bestehen in einer Sammlung von Entitäten in einem Repository Argumente ove die richtige Technik ist R die REST API? Ich finde es funktioniert gut für eine einzelne Entität, aber nicht für eine Sammlung. Beachten Sie, dass diese beiden Repository-Methoden wie erwartet funktionieren, wenn Sie direkt auf das JpaRepository zugreifen.

Beachten Sie auch, dass diese Abfragen funktionieren, wenn die Sammlung von einem primitiven Typ ist, zum Beispiel findByAccountIdIn(@Param("accountIds") Collection<Long> accountIds) ist mit der vorgesehenen Funktionalität über zugänglich. Das führt mich zu der Annahme, dass es möglicherweise ein Fehler in der Art und Weise ist, wie eine Liste von URIs an eine Abfragemethode übergeben wird, die eine Sammlung entsprechender Entitäten erwartet.

Vielen Dank im Voraus für jede Hilfe!

Antwort

1

Versuchen Sie den Abfrageparameter zu wiederholen, da die meisten Server dies als Liste interpretieren. Es ist vielleicht nicht die schönste Lösung, sollte aber funktionieren.

http://localhost:8080/people/search/findByAccountIn?accounts=http://localhost:8080/accounts/1&accounts=http://localhost:8080/accounts/2 
+0

Danke für die schnelle Antwort, leider, was Sie vorgeschlagen, funktioniert nicht. Es scheint, dass Spring Data Rest das nicht unterstützt (oder zumindest nicht richtig aufruft). Zum Beispiel: 'http: // localhost: 8080/Personen/Suche/findByAccountIdIn? AccountIds = 1,2 'funktioniert wie erwartet, aber' http: // localhost: 8080/Personen/search/findByAccountIdIn? AccountIds = 1 & accountIds = 2' erzeugt eine Fehlerseite (wie auch der Vorschlag, den du erwähnt hast) – hercuptruk

+0

hmmm ja, es scheint, sprint datenrest ist nicht wie die meisten Server. Ich habe versucht, es funktioniert auch mit einer kleinen Feder Daten-Rest-Lösung von mir selbst, aber bis jetzt vergeblich. Ich denke, Sie müssen möglicherweise eine benutzerdefinierte Implementierung des Rest-Repository erstellen und den Endpunkt wie gewünscht implementieren. Sehen Sie sich dieses Tutorial zum Erstellen benutzerdefinierter Methoden an: http://www.javabeat.net/spring-data-custom-repository/ Ich versuche es weiter, wenn ich etwas bekomme, was ich Ihnen sagen lassen werde. – Schokea

+0

Vielen Dank für Ihre Investition in meine Frage :). Vielleicht ist es ein Problem außerhalb SO Bericht zu melden - es scheint, wenn die Funktionalität für Sammlung ist, sollte es auch für Sammlung funktionieren hercuptruk

Verwandte Themen