Estoy usando github api para crear repositorys usando el command curl como se muestra abajo y funciona bien.
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
Ahora necesito ejecutar la misma URL anterior a través de HttpClient
y estoy usando RestTemplate
en mi proyecto.
He trabajado con RestTemplate
antes y sé cómo ejecutar url simple pero no estoy seguro de cómo publicar los datos JSON anteriores en mi url usando 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);
¿Alguien puede dar un ejemplo de cómo ejecutaría la URL anterior al publicar JSON en ella?
No he tenido time de probar el código, pero creo que esto debería ser el truco. Cuando estamos usando curl -u , para pasar las cnetworkingenciales, debe codificarse y pasarse junto con el encabezado Authorization , como se indica aquí http://curl.haxx.se/docs/manpage.html#–basic . Los datos json simplemente se pasan como 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);