Buduję ogólną usługę internetową i muszę pobrać wszystkie parametry zapytania w jeden ciąg do późniejszego przeanalizowania. Jak mogę to zrobić?
91
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
Niezanalizowaną część zapytania URI żądania można uzyskać z
UriInfo
obiektu:@GET public Representation get(@Context UriInfo uriInfo) { String query = uriInfo.getRequestUri().getQuery(); ... }
źródło
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
źródło