Spring HATEOAS ControllerLinkBuilder mit methodOn

9

Eine Sache, die ich nicht verstehe, wenn ich ControllerLinkBuilder mit methodOn -Funktion verwende, ist, was Sie tun sollen, wenn Ihr Controller eine Methodensignatur wie folgt hat:

%Vor%

Also wann immer ich methodOn verwenden möchte, wie fülle ich die Leerzeichen wie UserUpdateRequest und BindingResult (binding result zu) Mit @ControllerAdvice und JSR 303 können Sie Exceptions für fehlerhafte Anfragen behandeln, um Nachrichten lesbar zu machen.)

Wenn ich aus der Boxspring HATEOAS ControllerLinkBuilder mit methodOn etwas schreiben möchte, schreibe ich so etwas (beachte mich, ich weiß nicht, ob das so ist nicht rückgängig machen, aber der Code sieht nicht tröstlich aus):

%Vor%

Natürlich kann ich den methodOn -Teil weglassen und einfach linkTo verwenden, was mich dann dazu zwingen würde, den Pfad aufzubauen.

Ist es angemessen, nur null refs weiterzuleiten? Plus, wie ist es bequem mit methodOn , als ob Sie entscheiden, zu entfernen sagen: BindingResult oder fügen Sie etwas wie HttpServletRequest zu der Controller-Methode Signatur, so dass Frühling könnte mir mehr Informationen über die Anfrage geben, wenn ich aus Sicherheitsgründen eine IP-Adresse protokollieren möchte. Dies würde erfordern, dass ich den Link-Konstruktionsteil mit methodOn ändere.

Eine andere Frage, die mich etwas verwirrt, ist, dass ich eine legitime Referenz an methodOn wie userUpdateRequest mit Daten gefüllt übergebe - sollen diese Daten irgendwo mit dem generierten Link gehen ? Ich habe einige Hypermedia gesehen, die zusammen mit rel und href einen Körper dessen enthalten, was du passierst - ist das mit Spring HATEOAS möglich und ist es eine gute Praxis, Links zu erstellen, die bereit sind, Payloads in ihnen zu posten / zu platzieren?

Aber zurück zu ControllerLinkBuilder mit nur linkTo Methodenaufbau Links mit .Slash ("...") - ist es potenziell weniger Wartung teuer?

Was würdest du im Alltag empfehlen und was denkst du über Linkaufbau? Vielleicht könnte jemand professionelle Tipps / Ratschläge geben.

Danke,

    
Xeperis 10.04.2015, 17:12
quelle

1 Antwort

4

Wenn zum Erstellen des Pfades kein Parameter benötigt wird, können Sie null sicher an methodOn übergeben. Sie können "echte" Daten übergeben, da nur die zum Erstellen des Pfads benötigten Daten tatsächlich verwendet werden.

methodOn ist ein zweischneidiges Schwert. Auf der einen Seite erspart es Ihnen, Links manuell aufzubauen. Es wird also keine Fehler geben und wenn Sie einen Pfad ändern, sind alle Links immer noch korrekt. Auf der anderen Seite werden Sie fast sicher nie einen Pfad ändern, aber wie Sie bemerkt haben, können Sie die Signatur einer Methode ändern. In diesem Fall müssen Sie auch den Linkbuilding-Code aktualisieren, da er sonst nicht kompiliert wird. Du kannst das Update nicht vergessen, das ist eine gute Sache. Berücksichtigen Sie jedoch die folgende Änderung:

%Vor%

methodOn(UserController.class).update(userId, null, null) wäre immer noch semantisch korrekt, sodass Sie keinen Kompilierungsfehler erhalten. Das Erstellen der Verbindung wird jedoch fehlschlagen.

IMHO ist der beste Weg, sich auf automatisierte Link-Konstruktion so gut wie möglich zu verlassen, wie es von Spring Data REST getan wird. Ihre API sollte einfach und konsistent genug sein, um zumindest den Großteil des Link-Creating-Codes zu extrahieren. Der Link würde dann mit slash() erstellt werden, nicht mit methodOn .

Wie fügt man einen Körper ein: Das Standardformat von Spring HATEOAS ist HAL . Es verwendet eine _embedded -Eigenschaft, um solche Daten verfügbar zu machen.

    
zeroflagL 11.04.2015 07:53
quelle