Як я можу захопити всі параметри запиту в 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, Request, HttpHeaders, SecurityContext, Providers


Чи можемо ми використовувати 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
Хоча суворо правильний, я використовую цей підхід із суперкласом для автоматичного реєстрації параметрів, і він працює дуже гарно. Набагато чистіше, ніж необхідність передавати параметри з кожним запитом. Іноді функціональної чистоти потрібно просто поглянути на інший бік протягом декількох секунд, поки прагматичне програмування бере під контроль клавіатуру :)
Пол Рассел
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.