it-swarm.com.de

Zwei GET-Methoden mit unterschiedlichen Abfrageparametern: REST

Können wir den gleichen GET-URI mit unterschiedlichen Abfrageparametern erstellen?

Zum Beispiel: Ich habe zwei REST GET-URIs:

/questions/ask/?type=rest
/questions/ask/?byUser=john

Jetzt erkennt der Dienst REST zwei GET-Methoden nicht als getrennt und berücksichtigt nur eine GET-Methode, die als erste deklariert ist.

  1. warum verhält es sich so?
  2. Kann ich zwei GET-Methoden mit unterschiedlichen Abfrageparametern erstellen?

Es wäre sehr dankbar, wenn Sie eine Ressource zitieren könnten.

9
ritesh

Weil ein Ressource eindeutig durch seinen PFAD (und nicht durch seine Parameter) identifiziert wird. Zwei von Ihnen definierte Ressourcen haben denselben PFAD.

@Path("/questions/ask")

Nach JSR-311 Spezifikation :

Solche Methoden, die als Subressourcenmethoden bezeichnet werden, werden wie normale Ressourcenmethoden behandelt (siehe Abschnitt 3.3), mit der Ausnahme, dass die Methode nur für Anforderungs-URIs aufgerufen wird, die mit einer URI-Vorlage übereinstimmen, die durch Verketten der URI-Vorlage der Ressourcenklasse mit erstellt wurde die URI-Vorlage der Methode .

Da Ihr Datenmodell zwei unterschiedliche Ressourcen enthält, empfehle ich zwei Restmethoden mit unterschiedlichen Pfaden:

@Path("/questions/ask/type")
@Path("/questions/ask/user")

Dies ist die REST-Methode, da ein URI nur eine Ressource darstellt und keine Überlastung auftreten sollte. Wenn ein URI mehr als eine Ressource darstellt, bedeutet dies, dass Sie irgendwo einen Fehler gemacht haben.

19
darijan

Sie können nicht zwei Getter mit demselben URI, aber unterschiedlichen Anforderungsparametern haben. Was Sie tun können, ist eine Getter-Methode mit vielen Anforderungsparametern.

@RequestMapping(value = "uri", method = RequestMethod.GET)
public String test(@RequestParam String type, @RequestParam String byUser) 

rufen Sie es dann mit zwei Parametern auf

/questions/ask/?type=rest&byUser=john

Sie müssen die Logik innerhalb der Testmethode handhaben, um diese Parameter entsprechend zu handhaben.

In Bezug auf Darijan denke ich, dass es an der Entscheidung liegt, mit zwei Methoden oder einer Methode zu arbeiten, wenn man bedenkt, was die Unterstreichungslogik ist. Wenn Sie mit 2 Methoden gehen, dann verwenden Sie zwei Uri. Wenn die Geschäftslogik in Ordnung ist, um mit einem Uri zu gehen, dann benutze den Weg, den ich beantwortet habe

5

Sie können REST Anforderungen nicht überladen.

In Ihrer Business-Schicht müssten Sie überprüfen, welche der beiden Variablen gesetzt ist, und dann die erforderliche Verarbeitung durchführen.

5
JHS

Sie können den Restendpunkt hinsichtlich der in der Anforderung enthaltenen Anforderungs-/Abfrageparameter überlasten. Hier ist die Antwort, die meinen Anwendungsfall gelöst hat: Zwei Methoden für dasselbe URL-Muster mit unterschiedlichen Argumenten erstellen

0
arshellium