Jersey JaxRS'deki tüm sorgu parametrelerini nasıl alabilirim?


91

Genel bir web hizmeti oluşturuyorum ve tüm sorgu parametrelerini daha sonra ayrıştırmak için tek bir dizede toplamam gerekiyor. Bunu nasıl yapabilirim?

Yanıtlar:


163

@QueryParam("name")Bağlam aracılığıyla tek bir parametreye veya tüm parametreler aracılığıyla erişebilirsiniz:

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

Anahtar, @Context şunlara erişmek için kullanılabilen jax-rs ek açıklamasıdır :

UriInfo, Request, HttpHeaders, SecurityContext, Providers


GET ile kullanabilir miyiz?
iyi hissedin ve

33

İstek URI'sinin ayrıştırılmamış sorgu kısmı UriInfonesneden elde edilebilir :

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

4

Adding a bit more to the accepted answer. It is also possible to get all the query parameters in the following way without adding an additional parameter to the method which maybe useful when maintaining swagger documentation.

@Context
private UriInfo uriInfo;

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

ref


While this works, i wouldn't recommend it. If you can keep code functional pure, you should try it - it's the better approach.
martyglaubitz

1
Although strictly correct, I'm using this approach with a superclass to automatically log parameters, and it works very nicely. Much cleaner than having to pass the parameters with each request. Sometimes functional purity needs to just look the other way for a few seconds while pragmatic programming takes control of the keyboard :)
Paul Russell
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.