Gibt es eine Unterstützung für die Verwendung abstrakter Befehlsobjekte in Controller-Aktionsparameter? Dann würde es abhängig von den gegebenen Parametern in einer JSON-Anfrage das richtige Befehlsobjekt auswählen?Grails Controller Aktion Zusammenfassung Befehl Objekt Parameter
Zum Beispiel so etwas wie:
class SomeController {
def someAction(BaseCommand cmd){
// cmd could be instance of ChildCommandOne or ChildCommandTwo
}
class BaseCommand {
String paramOne
}
class ChildCommandOne extends BaseCommand {
String paramTwo
}
class ChildCommandTwo extends BaseCommand {
String paramThree
}
}
Ab jetzt habe ich request.JSON
wurde unter Verwendung der übergebenen Parameter und instanziiert das richtige Objekt Command zu erkennen. Ist das meine einzige Möglichkeit, mit dieser Art von Fällen umzugehen?
EDIT:
Um den Anwendungsfall hier zu klären. Ich habe zwei Domänenmodelle mit demselben Basisklassen-Domänenmodell und modelliere die Vererbung in der Datenbank mit dem Standardmodell table-per-hierarchy
.
In meinem Fall eine der untergeordneten Domäne Modelle Model A
erfordert ein Nicht-Nullable-String body
genannt, dass eine Texteingabe ist, während die anderen Model B
ein Nicht-Nullable-String directUrl
genannt erfordert. Dies sind Ankündigungen, die auf der Plattform gemacht werden können. Model A
ist ein Eintrag, der den Ankündigungshauptteil enthält, während Model B
einen Link zu einer Website von Drittanbietern darstellt, der die eigentliche Ankündigung enthält.
In diesen Szenarien habe ich traditionell eine if-Anweisung in der Controller-Aktion gesetzt, die bestimmt, welches verwandte Befehlsobjekt instanziiert wird, aber ich hoffe auf eine sauberere Methode.
Nun, ich denke nicht, es ist ein guter Ansatz, wenn Sie 3 verschiedene Befehle haben, warum erstellen Sie nicht 3 verschiedene Aktionen? Vielleicht wäre es einfacher, wenn Sie Ihren Anwendungsfall erklären würden – rgrebski
@rgrebski Ich habe die Frage aktualisiert, um meinen tatsächlichen Anwendungsfall zu enthalten. Wie kann ich zusätzlich zwischen den 3 Aktionen unterscheiden, ohne in meinen URL-Zuordnungen separate Endpunkte deklarieren zu müssen? – dvisco