Jak mogę pobrać wszystkie parametry zapytania w Jersey JaxRS?


91

Buduję ogólną usługę internetową i muszę pobrać wszystkie parametry zapytania w jeden ciąg do późniejszego przeanalizowania. Jak mogę to zrobić?

Odpowiedzi:


163

Możesz uzyskać dostęp do pojedynczego parametru poprzez @QueryParam("name")lub do wszystkich parametrów poprzez kontekst:

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

Kluczem jest @Context adnotacja jax-rs , do której można uzyskać dostęp:

UriInfo, Request, HttpHeaders, SecurityContext, Providers


Czy możemy używać z GET?
czuć się dobrze i programować

33

Niezanalizowaną część zapytania URI żądania można uzyskać z UriInfoobiektu:

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

4

Dodanie nieco więcej do zaakceptowanej odpowiedzi. Możliwe jest również pobranie wszystkich parametrów zapytania w następujący sposób bez dodawania dodatkowego parametru do metody, co może być przydatne przy utrzymywaniu dokumentacji 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


Chociaż to działa, nie polecałbym tego. Jeśli potrafisz zachować funkcjonalność kodu, powinieneś spróbować - to lepsze podejście.
martyglaubitz

1
Chociaż jest to ściśle poprawne, używam tego podejścia z nadklasą do automatycznego rejestrowania parametrów i działa bardzo ładnie. Znacznie czystsze niż przekazywanie parametrów przy każdym żądaniu. Czasami czystość funkcjonalna wymaga tylko spojrzenia w drugą stronę przez kilka sekund, podczas gdy pragmatyczne programowanie przejmuje kontrolę nad klawiaturą :)
Paul Russell
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.