将授权的curl -u post请求与JSON数据转换为RestTemplate等效项

时间:2015-02-08 04:45:22

标签: java git post curl 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

现在我需要通过HttpClient执行相同的上述网址,并在我的项目中使用RestTemplate

之前我曾与RestTemplate合作,我知道如何执行简单的网址但不知道如何使用RestTemplate将上述JSON数据发布到我的网址 -

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);

任何人都可以举例说明如何通过向其发布JSON来执行上述URL吗?

1 个答案:

答案 0 :(得分:3)

我没有时间测试代码,但我相信这应该可以解决问题。当我们使用 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);