web-dev-qa-db-fra.com

Deux méthodes GET avec des paramètres de requête différents: REST

Pourrions-nous créer le même URI GET mais avec des paramètres de requête différents?

Par exemple: j'ai deux REST GET URI:

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

À présent, le service REST ne reconnaît pas deux méthodes GET comme distinctes et ne considère qu'une seule méthode GET déclarée comme première.

  1. pourquoi se comporte-t-il de cette façon?
  2. Est-il possible de créer deux méthodes GET avec des paramètres de requête différents?

Ce serait très apprécié si vous pouviez citer n'importe quelle ressource.

9
ritesh

Parce qu'un ressource_ est identifié de manière unique par son CHEMIN (et non par ses paramètres). Deux ressources que vous définissez ont le même PATH.

@Path("/questions/ask")

Selon JSR-311 spec :

Ces méthodes, appelées méthodes de sous-ressource, sont traitées comme une méthode de ressource normale (voir la section 3.3), sauf que la méthode n'est appelée que pour les URI de requête correspondant à un modèle d'URI créé en concaténant le modèle d'URI de la classe de ressources avec le modèle d'URI de la méthode .

Étant donné que votre modèle de données comprend deux ressources distinctes, je suggère de créer deux méthodes de repos avec des chemins différents:

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

C'est la méthode RESTful, puisqu'un seul URI représente une et une seule ressource et qu'il ne devrait pas y avoir de surcharge. Si un URI représente plus d'une ressource, cela signifie que vous vous êtes trompé quelque part.

19
darijan

Vous ne pouvez pas avoir deux getters avec le même uri mais des paramètres de requête différents. Ce que vous pouvez faire est d’avoir une méthode d’acquisition avec plusieurs paramètres de requête.

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

puis appelez-le avec deux paramètres

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

Vous devez gérer la logique dans la méthode de test pour gérer ces paramètres en conséquence.

En ce qui concerne Darijan, je pense qu’il faut décider d’utiliser deux méthodes ou une méthode en fonction de la logique de soulignement. Si vous utilisez 2 méthodes, utilisez deux uri. Si la logique métier convient pour un uri, utilisez la façon dont j'ai répondu

5
Sanjaya Liyanage

Vous ne pouvez pas surcharger REST demandes.

Dans votre couche métier, vous devez vérifier laquelle des deux variables est définie, puis vous devez effectuer le traitement requis.

5
JHS

Vous pouvez surcharger le point de terminaison reste en termes de paramètres de requête/requête présents dans la requête. Voici la réponse qui a résolu mon cas d'utilisation: créer deux méthodes pour le même modèle d'URL avec des arguments différents

0
arshellium