La manipulation de plusieurs paramètres dans une URI (Paisiblement) en Java
J'ai travaillé sur une petite échelle, web service en Java/Jersey qui lit les listes des informations de l'utilisateur à partir de clients contenues dans des fichiers XML. J'ai actuellement ce fonctionnement dans un seul aspect: l'utilisation de plusieurs paramètres de l'URI pour désigner tirant plusieurs ensembles de données de l'utilisateur ou de plusieurs ensembles d'informations de client. J'ai une version qui fonctionne actuellement, mais n'est pas le meilleur moyen, ni ce que la description du projet appels pour.
Actuellement, mon code ressemble à ceci:
@Path("Client/{client}/users")
public class UserPage
{
@GET
@Produces(MediaType.TEXT_HTML)
public String userChoice(@PathParam(value = "client") final String client)
{****Method here which handles a list of 'users'****}
@GET
@Path("{name}")
@Produces(MediaType.TEXT_HTML)
public String userPage(@PathParam(value = "client") final String client, @PathParam(value = "name") final String name)
{****Method here which handles 'user' information****}
La première méthode gère une liste d'utilisateurs à partir d'un "client" désigne par "{client}" dans l'URI. La deuxième méthode permet de l'utilisateur de l'information " désigné par "{nom}" dans l'URI. Les deux fonctionnent avec un seul argument. Actuellement, afin de gérer plusieurs utilisateurs de " j'ai "{nom}" séparées par des virgules, comme "Client/Chick-Fil-A/utilisateurs/Phil,Bradley". Je peux analyser ce après l'utilisation de @PathParam et créer un tableau de ces "utilisateurs", mais encore une fois, je crois que ce n'est pas la meilleure façon de gérer cela, et la description du projet appelle à quelque chose de différent.
Est-il un moyen pour accomplir la même tâche avec une URI formaté en tant que "Client/Chick-Fil-A;cd=Phil,Bradley"? (L' ;cd= est ce qui me fait le plus de mal.)
J'ai aussi besoin d'être en mesure d'utiliser ce format pour plusieurs clients, c'est à dire "Client;cd=Chick-Fil-A,Métro/utilisateurs;cd=Phil,Bradley".
Edit: De préciser le projet:
Le client de l'information est contenue dans 6 des fichiers séparés. Chacun de ces fichiers a les mêmes 3 utilisateurs (ce qui est une preuve de concept, effectivement). J'ai besoin d'être en mesure de tirer différents sous-ensembles de l'information, par exemple, l'utilisateur Phil de Mcdonald's et de Chick-Fil-A, ou les utilisateurs de Phil et Pierre de Mcdonald's, ou les utilisateurs nommé Peter partir de tous les clients, etc.
OriginalL'auteur ZKSteffel | 2011-05-25
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas utiliser " = " dans l'URL du chemin, puisque c'est un caractère réservé. Cependant, il ya beaucoup d'autres caractères que vous pouvez utiliser comme des séparateurs tels que ' -',','. Ainsi, au lieu de"=", vous pouvez utiliser '-'. Si vraiment vous voulez vraiment utiliser '=' alors vous aurez à Encoder; cependant, je vous recommande fortement contre car il peut rendre les choses plus compliquées alors qu'il devrait être.
Vous pouvez voir la grammaire de la chaîne de l'URL ici:
http://www.w3.org/Addressing/URL/url-spec.txt
Copie et de la recherche la chaîne de caractères à ignorer dans le chemin de la grammaire:
Cela dit, je crois que la requête HTTP est généralement utilisé pour une requête de ressource unique seulement. Donc, mon opinion personnelle est de ne pas mettre en œuvre le service de la façon dont vous avez mis en place. Pour obtenir de multiples clients, je voudrais utiliser les paramètres de la requête en tant que filtres comme ceci:
Edit: à Partir de l'analyse de cas vous en êtes arrivé là, il me semble que vous avez probablement besoin d'un service comme
Donc, dire que vous voulez obtenir de Pierre de tous les clients peuvent ensuite avoir une demande de ce formulaire:
De même, si vous voulez obtenir Jack et Peter à partir de Starbucks, alors vous pouvez faire:
J'espère que cela aide.
Oh, je vois, comment sur le déplacement du client nom de paramètre de requête trop? si vous avez quelque chose comme /utilisateurs?société=<valeur>&utilisateur=<valeur> ?
Après avoir parlé avec quelqu'un d'autre sur mon projet, nous avons décidé que nous devons essayer et rester loin de paramètres de requête autant que possible. Ils peuvent éventuellement travailler pour ce code, mais comme je l'ai mentionné, ce code est davantage une preuve de concept. Le code que nous allons écrire sera plus complexe, de sorte que des requêtes dans l'URI deviendrait trop compliqué. Je suis à la recherche de plus pour une utilisation plus efficace de @PathParam, depuis @MatrixParam ne fonctionne que sur le dernier segment d'un URI.
Tu sais quoi, j'ai fini par avoir à utiliser quelque chose de similaire à votre édition du dernier cas. Je suppose que PathParam ne fonctionne pas aussi bien que je le pensais... Merci pour les suggestions de l'URI.
Pas de problème. Vous comprenez le problème que vous travaillez mieux que moi, afin de prendre une meilleure décision que moi. Content que mes suggestions vous ont aidé.
OriginalL'auteur Alvin
Chaînes de requête ont la syntaxe suivante et vous pouvez avoir plusieurs paramètres avec le même nom:
où query_string a la syntaxe suivante:
Pour plus de détails, consultez cette entrée dans Wikipedia: http://en.wikipedia.org/wiki/Query_string
OriginalL'auteur johnnieb