Comment puis-je récupérer tous les paramètres de requête dans Jersey JaxRS?


91

Je construis un service Web générique et j'ai besoin de saisir tous les paramètres de requête dans une chaîne pour une analyse ultérieure. Comment puis-je faire ceci?

Réponses:


163

Vous pouvez accéder à un seul paramètre via @QueryParam("name")ou à tous les paramètres via le contexte:

@POST
public Response postSomething(@QueryParam("name") String name, @Context UriInfo uriInfo, String content) {
     MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters(); 
     String nameParam = queryParams.getFirst("name");
}

La clé est l' @Context annotation jax-rs , qui peut être utilisée pour accéder:

UriInfo, Request, HttpHeaders, SecurityContext, Fournisseurs


Pouvons-nous utiliser avec GET?
feel good et programmation du

33

La partie requête non analysée de l'URI de la requête peut être obtenue à partir de l' UriInfoobjet:

@GET
public Representation get(@Context UriInfo uriInfo) {
  String query = uriInfo.getRequestUri().getQuery();
  ...
}

4

Ajout d'un peu plus à la réponse acceptée. Il est également possible d'obtenir tous les paramètres de requête de la manière suivante sans ajouter de paramètre supplémentaire à la méthode, ce qui peut être utile lors de la maintenance de la documentation swagger.

@Context
private UriInfo uriInfo;

@POST
public Response postSomething(@QueryParam("name") String name) {
     MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters(); 
     String nameParam = queryParams.getFirst("name");
}

réf


Bien que cela fonctionne, je ne le recommanderais pas. Si vous pouvez garder le code fonctionnel pur, vous devriez l'essayer - c'est la meilleure approche.
martyglaubitz

1
Bien que strictement correct, j'utilise cette approche avec une superclasse pour enregistrer automatiquement les paramètres, et cela fonctionne très bien. Beaucoup plus propre que de devoir passer les paramètres à chaque demande. Parfois, la pureté fonctionnelle doit simplement regarder dans l'autre sens pendant quelques secondes tandis que la programmation pragmatique prend le contrôle du clavier :)
Paul Russell
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.