Выполнение нескольких вызовов клиента rest

#java #rest #client #put

#java #rest #клиент #положить

Вопрос:

Я пытаюсь выполнить несколько клиентских вызовов, используя org.apache.wink.client.RestClient для службы с базовой аутентификацией.

При первом вводе я получаю код состояния 200, но затем время ожидания соединения истекает.

Я пытался воссоздавать клиент каждый раз, когда я собираюсь сделать новый put.

Вот мой код:

 for (int pos = 0; pos < jsonsToSend.size(); pos  ) {
        BasicAuthSecurityHandler secHandler = new BasicAuthSecurityHandler();
        ClientConfig config = new ClientConfig();
        secHandler.setUserName(username);
        secHandler.setPassword(password);
        config.handlers(secHandler);

        RestClient client = new RestClient(config);
        Resource resource = client.resource(url);

        actualJson = JSONObject.parse(jsonsToSend.get(pos).toString());
        response = putJson(actualJson, resource);
    }
  

Это метод putJson:

 private ClientResponse putJson(JSONObject jsonSend, Resource resource) throws Exception {
    try {
        ClientResponse response = resource.contentType("text/plain; charset=utf-8").accept("*/*").put(jsonSend.toString());
        return response;
    } catch (Exception e) {
        throw e;
    }
}
  

Знаете ли вы, как выполнить несколько вызовов rest?

Комментарии:

1. Не создавайте заново свой RestClient для каждого вызова. Используйте один клиент для выполнения нескольких вызовов.

2. Уже пробовал это, сделайте несколько вызовов с одним и тем же клиентом. Тот же результат. :/

3. Я имею в виду, что это лучшая практика — один клиент, несколько вызовов. Ваши проблемы не потому, что вы не воссоздали клиент снова.

Ответ №1:

Да, вы могли бы. Вот как я это сделал: Уровень обслуживания: … //Сначала один ResponseEntity> firstResponse = firstClient.createEntity(requestPayload1);

// Второй один ResponseEntity> secondResponse = secondClient.createEntity(requestPayload2);

Оба могут передавать один и тот же объект requestPayload.

Итак, вам нужно иметь двух клиентов (если вы не хотите каждый раз динамически менять конструктор)

Я предполагаю, что вы уже знаете, как создать клиент. В моем случае я использовал RestTemplate.getUriTemplateHandler() для создания URI, затем запрашивал значение и параметризованный параметр для exchange.

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