#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.
Если вы не выполняете никакой транзакционной работы, я бы подумал, что вызов по порядку, как я сделал, будет в порядке.