2015-02-08 2 views
1

Я использую github api для создания репозиториев с помощью команды curl, как показано ниже, и он отлично работает.Перевести авторизованный curl -u отправить запрос с данными JSON на эквивалент RestTemplate

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 на него?

+0

В этом URL-адресе нет ничего сложного. Что вы имеете в виду? Какая у вас проблема, конкретно? –

+0

@SotiriosDelimanolis Я не уверен, где я буду размещать все другие параметры, кроме URL-адреса. Я только путаю только эту часть. В противном случае я довольно ясно, что мне нужно делать. URL-адрес будет конечной частью команды curl. – john

ответ

2

У меня не было времени проверить код, но я считаю, что это должно сделать трюк. Когда мы используем curl -u, чтобы передать учетные данные, он должен быть закодирован и передан вместе с заголовком Авторизация, как указано здесь 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); 
+1

Удивительный, сегодня узнал что-то новое. Спасибо за помощь. – john

+0

Отлично! Рад узнать, что это сработало для вас. – ZakiMak

Смежные вопросы