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

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


person Tom    schedule 19.04.2011    source источник


Ответы (4)


Вы можете получить доступ к одному параметру через @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, провайдеры

person hisdrewness    schedule 19.04.2011
comment
Можем ли мы использовать с GET? - person Nagappa L M; 16.10.2014

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

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

Добавление немного больше к принятому ответу. Также можно получить все параметры запроса следующим образом, не добавляя дополнительный параметр к методу, который может быть полезен при ведении документации 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

person Janak    schedule 25.01.2019
comment
Хотя это работает, я бы не рекомендовал это. Если вы можете сохранить функциональность кода в чистоте, вам следует попробовать — это лучший подход. - person martyglaubitz; 20.02.2019
comment
Хотя это совершенно правильно, я использую этот подход с суперклассом для автоматической регистрации параметров, и он работает очень хорошо. Намного чище, чем передавать параметры с каждым запросом. Иногда функциональной чистоте нужно просто отвернуться на несколько секунд, пока прагматичное программирование берет под свой контроль клавиатуру :) - person Paul Russell; 20.02.2019

мы можем отправить значение клиента на сервер, используя параметр запроса, например

http://localhost:8080/JerseyDemo/rest/user/12?p=10

Здесь p — значение параметра запроса. мы можем получить это значение, используя аннотацию @QueryParam(p)

public adduser(@QueryParam("p") int page){
  //some code 
}

Иногда мы отправляем список значений в параметре запроса, например

http://localhost:8080/JerseyDemo/rest/user/12?city=delhi&country=india&city=california

В этом случае мы можем получить все параметры запроса, используя @Context UriInfo.

public String addUser( @Context UriInfo uriInfo){
        List<String> cityList = uriInfo.getQueryParameters().get("city");

 }

Вы можете увидеть полный пример с более подробной информацией - аннотация QueryParam в Джерси Здесь вы увидите больше других методов для получения параметра запроса в трикотаже.

person Anuj Dhiman    schedule 14.06.2021