Spring Resttemplate:如何同时发布文件和常见的String数据

时间:2018-01-26 04:01:35

标签: spring-mvc resttemplate

我遇到了使用spring resttemplate上传文件上传文件的请求 使用http标头" multipart / form-data",还需要发布一些其他正常参数。如何实现?

3 个答案:

答案 0 :(得分:2)

您可以在应用程序中使用以下代码来同时具有multipartfile和常规请求参数。

  • 用您自己的网址替换。
  • 根据您的常规参数替换参数和值。

    String url ="http://example.com"; String fileAbsPath ="absolute path of your file"; String fileName = new File(fileAbsPath).getName(); Files.readAllBytes(Paths.get(fileAbsPath)); MultiValueMap<String, Object> data = new LinkedMultiValueMap<String, Object>(); ByteArrayResource resource = new ByteArrayResource(Files.readAllBytes(Paths.get(fileAbsPath))) { @Override public String getFilename() { return fileName; } }; data.add("file", resource); HttpHeaders requestHeaders = new HttpHeaders(); requestHeaders.set("file","application/pdf"); UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url) .queryParam("param1", "value1") .queryParam("param2", "value2") HttpEntity<> entity = new HttpEntity<> (data, requestHeaders); RestTemplate restTemplate = new RestTemplate(); ResponseEntity<String> result =restTemplate.exchange( builder.toUriString(), HttpMethod.POST, entity, String.class); System.out.println(result.getBody());

答案 1 :(得分:1)

您可以使用此代码。

   HttpHeaders headers = getCASHeaders(MediaType.MULTIPART_FORM_DATA);
   LinkedMultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
   params.add("fileField", new FileSystemResource(""));//get file resource
   params.add("stringfield", stringPayload);
   HttpEntity requestEntity = new HttpEntity<>(params, headers);
   ResponseEntity<CasAssetApiResponse> response = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);

这将发送带有两个参数的帖子,你可以根据自己的意愿添加更多。

请同时查看此stackoverflow answer

答案 2 :(得分:-1)

尽管我的代码没有任何强制转换,但我收到错误消息“无法强制转换为java.lang.String”。

enter image description here