Преобразование авторизованного почтового запроса curl -u с данными JSON в эквивалент RestTemplate

Я использую github api для создания репозиториев с помощью команды curl, как показано ниже, и все работает нормально.

curl -i -u "username:password" -d '{ "name": "TestSystem", "auto_init": true, "private": true, "gitignore_template": "nanoc" }' https://github.host.com/api/v3/orgs/Tester/repos

Теперь мне нужно выполнить тот же указанный выше URL-адрес через HttpClient, и я использую RestTemplate в своем проекте.

Я работал с RestTemplate раньше, и я знаю, как выполнить простой URL-адрес, но не уверен, как опубликовать вышеуказанные данные JSON на моем URL-адресе, используя RestTemplate -

RestTemplate restTemplate = new RestTemplate();

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);

// Create a multimap to hold the named parameters
MultiValueMap<String, String> parameters = new LinkedMultiValueMap<String, String>();
parameters.add("username", username);
parameters.add("password", password);

// Create the http entity for the request
HttpEntity<MultiValueMap<String, String>> entity =
            new HttpEntity<MultiValueMap<String, String>>(parameters, headers);

ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);

Может ли кто-нибудь привести пример, как мне выполнить указанный выше URL-адрес, отправив ему JSON?


person john    schedule 08.02.2015    source источник
comment
В этом URL нет ничего сложного. Что ты имеешь в виду? Какая у вас проблема, конкретно?   -  person Sotirios Delimanolis    schedule 08.02.2015
comment
@SotiriosDelimanolis Я не уверен, где я буду помещать все остальные параметры, кроме URL. Меня смущает только эта часть. В противном случае я довольно ясно, что мне нужно сделать. URL-адрес будет последней частью команды curl.   -  person john    schedule 08.02.2015


Ответы (1)


У меня не было времени протестировать код, но я считаю, что это должно сработать. Когда мы используем curl -u, для передачи учетных данных их необходимо закодировать и передать вместе с заголовком Authorization, как указано здесь http://curl.haxx.se/docs/manpage.html#--basic. Данные json просто передаются как HttpEntity.

String encoding = Base64Encoder.encode("username:password");
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", "Basic " + encoding);
headers.setContentType(MediaType.APPLICATION_JSON); // optional

String data = "{ \"name\": \"TestSystem\", \"auto_init\": true, \"private\": true, \"gitignore_template\": \"nanoc\" }";
String url = "https://github.host.com/api/v3/orgs/Tester/repos";

HttpEntity<String> entity = new HttpEntity<String>(data, headers);    
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, entity , String.class);
person ZakiMak    schedule 08.02.2015