@QueryParam или HttpServletRequest в Java - PullRequest
1 голос
/ 14 мая 2019

У меня есть класс ресурсов - интерфейс UserResource, и я определил конечную точку как getUsers.

Теперь я хочу отфильтровать этих пользователей по статусу пользователя - (активный, неактивный) и это не обязательно, так что если я это сделаюне передавая статус, он получит всех пользователей.

Теперь вопрос заключается в том, должен ли я передать это как @ QueryParam или получить его от

HttpServletRequest - httpServletRequest.getParameter("Status").

Какой извышеприведенные два - лучший способ, и в каком сценарии я должен использовать какой.

1. Первый способ - передать статус в качестве параметра запроса и определить его в самом файле ресурсов.Здесь UserResource - интерфейс контроллера или класс ресурсов.В методе getUsers есть @QueryParam.

import javax.ws.rs.core.Response;

    @Path(/user)
    public interface UserResource{

          @GET
          @Path("/")
          @Produces({ MediaType.APPLICATION_JSON })
          Response getUsers(@QueryParam("status") String status);

    }

    @Component
    Public class UsersResourceImpl implement UserResource{

    public Response getPlan(String status){

    String userStatus = status;
    // some logic

    } 
}

2. Второй способ - получить параметр запроса из HttpServletRequest.поэтому я автоматически подключил HttpServletRequest и получил параметр запроса из httpservletrequest.

import javax.ws.rs.core.Response;

@Path(/user)
public interface UserResource {

    @GET
    @Path("/")
    @Produces({ MediaType.APPLICATION_JSON })
    Response getUsers();

    }

import javax.servlet.http.HttpServletRequest;

@Component
Public class UsersResourceImpl implements UserResource{

    @Autowired
    private HttpServletRequest httpRequest;

    public Response getPlan(String status){

    String status = httpRequest.getParameter(status)
        // some logic
    } 
}
'''

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Честно говоря, я не вижу привлекательной причины избегать использования аннотации @QueryParam, учитывая, что вам нужно значение из параметра запроса.

Некоторые преимущества использования @QueryParam, о котором я могу думать:

  • Аннотация @QueryParam автоматически свяжет значение (я) параметра запроса спараметр метода ресурса, поле класса ресурса или свойство компонента класса ресурса.Поэтому вам не нужно будет извлекать и анализировать параметры вручную, если вы соблюдаете некоторые правила, описанные в документации :

    Тип T аннотированного параметра, поля илисвойство должно либо:

    1. Примитивный тип
    2. Иметь конструктор, который принимает один строковый аргумент
    3. Иметь статический метод с именем valueOf или fromString, который принимает одинString аргумент (см., Например, Integer.valueOf(String))
    4. Зарегистрированная реализация ParamConverterProvider SPI расширения JAX-RS, который возвращает ParamConverter экземпляр, способный к преобразованию типа "из строки" для типа.Be List<T>, Set<T> или SortedSet<T>, где T удовлетворяет 2, 3 или 4 выше.Полученная коллекция доступна только для чтения.
  • @QueryParam можно объединить с @DefaultValue для определениязначение по умолчанию для параметра, если его нет в запросе.

  • Если несколько конечных точек поддерживают одни и те же параметры запроса, вы можете объединить их в классе и получить экземпляр такого классакак @BeanParameter.

0 голосов
/ 14 мая 2019

Перейти с аннотациями (т.е. @QueryParam), поэтому мы выбрали такой фреймворк, помните соглашение по конфигурации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...