Как я могу получить все параметры запроса в Jersey JaxRS?

91

Я создаю универсальный веб-сервис, и мне нужно собрать все параметры запроса в одну строку для последующего анализа. Как я могу это сделать?

Том
источник

Ответы:

163

Вы можете получить доступ к одному параметру @QueryParam("name")или всем параметрам через контекст:

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

Ключом является @Context аннотация jax-rs , которая может использоваться для доступа:

UriInfo, Запрос, HttpHeaders, SecurityContext, Провайдеры

его вид
источник
Можем ли мы использовать с GET?
чувствую себя хорошо и программирование
33

Непроанализированная часть запроса URI запроса может быть получена из UriInfoобъекта:

@GET
public Representation get(@Context UriInfo uriInfo) {
  String query = uriInfo.getRequestUri().getQuery();
  ...
}
глеруп
источник
4

Добавляем еще немного к принятому ответу. Также можно получить все параметры запроса следующим образом, не добавляя дополнительный параметр к методу, что может быть полезно при ведении документации по swagger.

@Context
private UriInfo uriInfo;

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

ссылка

Джанак
источник
Хотя это работает, я бы не рекомендовал это. Если вы можете сохранить функциональность кода в чистоте, вы должны попробовать - это лучший подход.
martyglaubitz
1
Хотя это строго правильно, я использую этот подход с суперклассом для автоматического протоколирования параметров, и он работает очень хорошо. Намного чище, чем передавать параметры с каждым запросом. Иногда функциональной чистоте нужно просто на несколько секунд взглянуть в другую сторону, в то время как прагматичное программирование берет на себя управление клавиатурой :)
Пол Рассел