我有以下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方法,这是正确的。)
我尝试了很多其他方法,但是没有用
答案 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 );