Sollte ich mit @QueryParam oder @BeanParam in JAX-RS?
Ich bin am überlegen von zwei Optionen für die Verarbeitung von query/request-Parameter:
- Karte einzelnen Parameter auf die entsprechenden die Parameter der Methode:
@GET
public String blah(@QueryParam("testParam") String testParam) {
}
- Anzeigen alle Parameter auf die Eigenschaften einer Java-bean:
@GET
public String blah(@BeanParam RequestParamBean bean) {
}
Die zweite option scheint mehr attraktiv, denn es ermöglicht die überprüfung der Logik von input-query-Parameter werden verschoben und entkoppelt von der blah
Methode, deren Kern-Aufgabe sollten Prozess und die übertragung der Validierung, um ein validator sollte hohen Grad der Entkoppelung (und auch FESTE Prinzip, richtig?).
Jedoch, die meisten der Beispiele, die ich finden (in der Tat, das vorhandene Projekt an dem ich arbeite) verwenden Sie nur die erste option. Ich Frage mich, ob gibt es einen Grund, warum die zweite option ist nicht weit verbreitet? Gibt es irgendwelche Fallstricke? Ist dies ein anti-pattern? Ist dies gegen jede best practice?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
@BeanParam
annotation eingeführt wurde, die in JAX-RS 2.0 als parameter aggregator (was bedeutet, es kann nicht verwendet werden in JAX-RS 1.0).Die Idee hinter dem
@BeanParam
annotation wird eine Java-Klasse zu aggregierten Parameter versehen mit@XxxParam
Anmerkungen. Die folgenden@XxxParam
Anmerkungen können verwendet werden, um kommentieren Sie die Felder des parameter-aggregator-Klasse:@CookieParam
@FormParam
@HeaderParam
@MatrixParam
@PathParam
@QueryParam
Neben Felder kommentierte die
@XxxParam
Anmerkungen, die parameter aggregator Klasse kann Felder versehen mit der@Context
annotation. Für eine Liste der Typen, die injiziert werden können, mit der@Context
annotation, überprüfen Sie diese Antwort.Ich glaube, es ist nur eine Frage der Bequemlichkeit und der Vorliebe der Entwickler. In vielen Situationen, eine Klasse zu aggregierten Parameter ist nicht notwendig. Die Nutzung der
@XxxParam
Anmerkungen in die Parameter der Methode ist sehr praktisch.Aber wenn Sie brauchen, um Wiederverwendung Parameter in verschiedenen Methoden, oder die Methode hat viele Parameter kommentiert mit
@XxxParam
Anmerkungen, gehen für die@BeanParam
Ansatz.In Ihrer Frage, Sie erwähnten den SOLID-Prinzip. Aber vergessen Sie nicht die KISS-Prinzip 🙂
Beginnen Sie mit der
@XxxParam
Anmerkungen in der Methode, Parameter und nicht übernutzung der@BeanParam
annotation versuchen, ein problem zu lösen, die Sie nicht haben. Sie können immer umgestalten von code zum erstellen einer parameter-aggregator Klasse, wenn Sie es brauchen.@BeanParam
bietet, was Sie brauchen, verwenden Sie es 🙂