将授权的 curl -u post request with JSON data 转换为等效的 RestTemplate
Translate authorized curl -u post request with JSON data to RestTemplate equivalent
我正在使用 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 但不确定如何 post 上面的 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);
任何人都可以提供一个示例,我将如何通过 posting JSON 来执行上面的 URL 吗?
我没有时间测试代码,但我相信这应该可以解决问题。当我们使用 curl -u 传递凭据时,必须对其进行编码并与 Authorization header 一起传递,如此处所述 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);
我正在使用 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 但不确定如何 post 上面的 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);
任何人都可以提供一个示例,我将如何通过 posting JSON 来执行上面的 URL 吗?
我没有时间测试代码,但我相信这应该可以解决问题。当我们使用 curl -u 传递凭据时,必须对其进行编码并与 Authorization header 一起传递,如此处所述 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);