Spring mvc SpringRestTemplate:如何同时发布文件和公共字符串数据

Spring mvc SpringRestTemplate:如何同时发布文件和公共字符串数据,spring-mvc,resttemplate,Spring Mvc,Resttemplate,我满足了使用spring resttemplate上载文件的请求 对于http头文件“multipart/form data”,还需要发布一些其他正常参数。如何实现这一点?您可以使用此代码 HttpHeaders headers = getCASHeaders(MediaType.MULTIPART_FORM_DATA); LinkedMultiValueMap<String, Object> params = new LinkedMultiValueMap<>

我满足了使用spring resttemplate上载文件的请求 对于http头文件“multipart/form data”,还需要发布一些其他正常参数。如何实现这一点?

您可以使用此代码

   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);
HttpHeaders=getCASHeaders(MediaType.MULTIPART\u FORM\u DATA);
LinkedMultiValueMap参数=新建LinkedMultiValueMap();
params.add(“fileField”,新文件系统资源(“”)//获取文件资源
参数添加(“stringfield”,stringPayload);
HttpEntity requestEntity=新的HttpEntity(参数、头);
ResponseEntity response=restemplate.exchange(url,HttpMethod.POST,requestEntity,String.class);
这将发送两个参数的post呼叫,您可以根据自己的意愿添加更多参数

请同时查看此代码

您可以使用此代码

   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);
HttpHeaders=getCASHeaders(MediaType.MULTIPART\u FORM\u DATA);
LinkedMultiValueMap参数=新建LinkedMultiValueMap();
params.add(“fileField”,新文件系统资源(“”)//获取文件资源
参数添加(“stringfield”,stringPayload);
HttpEntity requestEntity=新的HttpEntity(参数、头);
ResponseEntity response=restemplate.exchange(url,HttpMethod.POST,requestEntity,String.class);
这将发送两个参数的post呼叫,您可以根据自己的意愿添加更多参数

请也查看一下

您可以在应用程序中使用以下代码同时使用multipartfile和普通请求参数。
  • 将url替换为您自己的url
  • 根据正常参数替换参数和值

    stringurl=”http://example.com";
    String fileAbsPath=“文件的绝对路径”;
    字符串fileName=新文件(fileAbsPath).getName();
    Files.readAllBytes(path.get(fileAbsPath));
    多值映射数据=新的LinkedMultiValueMap();
    ByteArrayResource资源=新的ByteArrayResource(Files.readAllBytes(path.get(fileAbsPath))){
    @凌驾
    公共字符串getFilename(){
    返回文件名;
    }
    };
    数据。添加(“文件”,资源);
    HttpHeaders requestHeaders=新的HttpHeaders();
    requestHeaders.set(“文件”、“应用程序/pdf”);
    UriComponentsBuilder=UriComponentsBuilder.fromHttpUrl(url)
    .queryParam(“参数1”、“值1”)
    .queryParam(“参数2”、“值2”)
    HttpEntity实体=
    新的HttpEntity(数据、请求头);
    RestTemplate RestTemplate=新RestTemplate();
    ResponseEntity结果=restTemplate.exchange(
    builder.string(),
    HttpMethod.POST,
    实体,
    字符串(类);
    System.out.println(result.getBody());
    

您可以在应用程序中使用以下代码来同时拥有multipartfile和普通请求参数。
  • 将url替换为您自己的url
  • 根据正常参数替换参数和值

    stringurl=”http://example.com";
    String fileAbsPath=“文件的绝对路径”;
    字符串fileName=新文件(fileAbsPath).getName();
    Files.readAllBytes(path.get(fileAbsPath));
    多值映射数据=新的LinkedMultiValueMap();
    ByteArrayResource资源=新的ByteArrayResource(Files.readAllBytes(path.get(fileAbsPath))){
    @凌驾
    公共字符串getFilename(){
    返回文件名;
    }
    };
    数据。添加(“文件”,资源);
    HttpHeaders requestHeaders=新的HttpHeaders();
    requestHeaders.set(“文件”、“应用程序/pdf”);
    UriComponentsBuilder=UriComponentsBuilder.fromHttpUrl(url)
    .queryParam(“参数1”、“值1”)
    .queryParam(“参数2”、“值2”)
    HttpEntity实体=
    新的HttpEntity(数据、请求头);
    RestTemplate RestTemplate=新RestTemplate();
    ResponseEntity结果=restTemplate.exchange(
    builder.string(),
    HttpMethod.POST,
    实体,
    字符串(类);
    System.out.println(result.getBody());
    

虽然我的代码没有任何强制转换,但我得到了错误“无法强制转换为java.lang.String”

虽然我的代码没有任何强制转换,但我收到了错误“无法强制转换为java.lang.String”


但是这样,“stringfield”的值是一个LinkedList,而不是一个字符串….,他们的api可以识别这个值….但是这样,“stringfield”的值是一个LinkedList,而不是一个字符串….,他们的api可以识别这个值….这不是问题的答案。这不是问题的答案。我也有这个问题,我试过了,但我发现:原因:org.apache.tomcat.util.http.fileupload.FileUploadException:请求被拒绝,因为没有找到多部分边界我也有这个问题,我尝试了它,但得到:由:org.apache.tomcat.util.http.fileupload.FileUploadException引起:请求被拒绝,因为找不到多部分边界