web-dev-qa-db-fra.com

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

Je suis en train de construire 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?

85
Tom

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'annotation @Contextjax-rs , qui peut être utilisée pour accéder à:

UriInfo, Request, HttpHeaders, SecurityContext, Fournisseurs

150
hisdrewness

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

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

Ajoutant 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 s'avérer 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");
}

ref

1
Janak