如何将此POST cURL请求转换为Java代码

时间:2019-01-15 10:16:44

标签: spring rest

我有以下cURL请求,我想将其转换为Java代码以使用spring执行它。

我用它上传文件,cURL请求正常工作。

 curl "https://mywebsite.service-now.com/api/now/attachment/file?table_name=incident&table_sys_id=fa4922f6db3ea30085a0f7871d961999&file_name=test.zip" --request POST --header "Accept:application/json" --header "Authorization:Basic cmVhbHRlc3QyOmJwb3N0QDEyMw==" --header "Content-Type: application/zip" -F "uploadFile=@test.zip"

我将使用以下API:

https://docs.servicenow.com/bundle/geneva-servicenow-platform/page/integrate/inbound_rest/reference/r_AttachmentAPI-POST.html

我做了一些研究,发现我必须使用restTemplate才能使用第三方API。

我也这样写:

HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.TEXT_PLAIN);
    headers.add("Authorization", "Basic " + encodePassword());
    return headers;

(我创建了encodePassword方法,这是正确的。)

我尝试了很多其他方法,但是没有用

1 个答案:

答案 0 :(得分:0)

您必须将content-type header的值设置为MediaType.MULTIPART_FORM_DATA。设置此标头后,RestTemplate将自动封送文件数据以及一些元数据。

//Headers

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

//parameter values
// the getTestFile( ) method generates a file on the fly and returns a FileSystemResource

MultiValueMap<String, Object> map= new LinkedMultiValueMap<>();
map.add("file", getTestFile();
...

//create request
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers);

ResponseEntity<String> response = restTemplate.postForEntity( url, request , String.class );