Wie kann Spring Data REST angepasst werden, um einen Pfad mit mehreren Segmenten für eine Repository-Ressource zu verwenden?

8

Ich entwickle eine komponentenbasierte CRUD-Anwendung mit Spring Data JPA und Spring Data REST. Ich habe mehrere Komponenten. Zum Beispiel hat die system -Komponente das User -Modell und das UserRepository . Komponenten werden durch die Paketnamen unterschieden. wie com.example.app.<component_name>

Damit meine REST-API sauberer aussieht, muss ich die API-URL wie folgt implementieren:

host:8080/<component_name>/<model_collection_name>

zum Beispiel

host:8080/system/users

Ich habe Folgendes in meinem Repository

getan %Vor%

dies erzeugt folgendes, wenn ich http://localhost:8080

gehe %Vor%

Aber wenn ich http://localhost:8080/system/users

gehe

Es gibt einen Fehler

  

Fr 22. Mai 17:56:37 IST 2015 Es ist ein unerwarteter Fehler aufgetreten (Typ = Nicht   Gefunden, Status = 404). Keine Nachricht verfügbar

NOTE : Wenn ich den Pfad system-users zugeordnet habe, funktioniert es einwandfrei, aber wenn ich% %%% s% im Pfad verwende, zB / , es bricht und gibt den Fehler.

    
Faraj Farook 22.05.2015, 12:38
quelle

2 Antworten

10

tl; dr

Nicht unterstützt.

Details

Ganz allgemein: Konzentrieren Sie sich nicht auf das Entwerfen von URLs. Die Struktur eines URI darf per Definition nicht für einen REST-Client von Bedeutung sein:

  

Zu keiner Zeit muss die Server- oder Client-Software die Bedeutung eines URI kennen oder verstehen - sie fungieren lediglich als ein Kanal, durch den der Ersteller einer Ressource (eine menschliche Namensautorität) Repräsentationen mit der Semantik assoziieren kann durch den URI identifiziert.

(von Roy Fielding - Architectural Styles und das Design netzwerkbasierter Softwarearchitekturen - Abschnitt 6.2.4 )

Wenn Sie diesen Kriterien folgen, achten Sie darauf, Beziehungsnamen auszuwählen, die Repräsentationen für die von Ihnen bereitgestellten Ressourcen zu entwerfen usw.

Das, wonach Sie suchen, wird derzeit nicht unterstützt. Wenn Sie denken, dass es sich lohnt, dieses Feature hinzuzufügen (ich denke, das ist aufgrund des obigen Arguments nicht der Fall), können Sie in unserer ein Ticket öffnen Bug Tracker .

Aufgrund der Funktionsweise von Spring MVC Mapping ist es wahrscheinlich recht schwierig, es zu implementieren, und insbesondere die Kombination der Zuordnung singulärer Pfadsegmente und nicht-singulärer Pfadsegmente kann einige Mehrdeutigkeiten verursachen. All dies macht es eher unwahrscheinlich, dass diese Anfrage weiter verfolgt wird.

    
Oliver Gierke 25.05.2015, 12:33
quelle
1

Ich denke, dass diese (oder eine ähnliche) Frage bereits beantwortet wurde hier auf stackoverflow.

Legen Sie das Basis-URI mithilfe einer benutzerdefinierten RepositoryRestMvcConfiguration-Klasse fest.

    
Andreas Aumayr 24.05.2015 14:52
quelle