Java 带文件的postForEntity的Rest模板&;其他属性

Java 带文件的postForEntity的Rest模板&;其他属性,java,rest,spring-boot,Java,Rest,Spring Boot,我想在rest模板中上传带有Json请求的文件以及其他属性。但我做不到这一点 @Bean public RestTemplate getRestTemplate(RestTemplateBuilder restTemplateBuilder) { return restTemplateBuilder.build(); } @Autowired private RestTemplate restTemplate; @Scheduled(fixedDelay = 1000) public

我想在rest模板中上传带有Json请求的文件以及其他属性。但我做不到这一点

@Bean
public RestTemplate getRestTemplate(RestTemplateBuilder restTemplateBuilder) {
    return restTemplateBuilder.build();
}

@Autowired
private RestTemplate restTemplate;

@Scheduled(fixedDelay = 1000)
public void _do() throws Exception {
    HashMap<String, String> documentProperties = new HashMap<>();
    documentProperties.put("number", "123");


    MultipartFile file = Somefile;


    UploadDocumentRequest uploadDocumentRequest = new UploadDocumentRequest();
    uploadDocumentRequest.setDocumentClass("DocClass");
    uploadDocumentRequest.setDocumentProperties(documentProperties);
    uploadDocumentRequest.setFile(file);  ----???





    ResponseEntity<String> value = restTemplate.postForEntity("URL", uploadDocumentRequest, String.class);

    }
@Bean
公共RestTemplate getRestTemplate(RestTemplateBuilder RestTemplateBuilder){
返回restTemplateBuilder.build();
}
@自动连线
私有RestTemplate RestTemplate;
@计划(固定延迟=1000)
public void_do()引发异常{
HashMap documentProperties=新建HashMap();
文件属性。放置(“编号”、“123”);
MultipartFile file=Somefile;
UploadDocumentRequest UploadDocumentRequest=新的UploadDocumentRequest();
uploadDocumentRequest.setDocumentClass(“DocClass”);
uploadDocumentRequest.setDocumentProperties(documentProperties);
uploadDocumentRequest.setFile(文件);----???
ResponseEntity值=restTemplate.postForEntity(“URL”,uploadDocumentRequest,String.class);
}

您必须创建带有标题和正文的
HttpEntity

  • 将内容类型标题值设置为MediaType.MULTIPART\u FORM\u DATA
  • 将请求主体构建为
    LinkedMultiValueMap
    类的实例
  • 构造一个
    HttpEntity
    实例,该实例包装头部和主体对象,并使用
    restemplate
    发布它 示例代码如下所示:

    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.MULTIPART_FORM_DATA);
    
    MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
    body.add("file", getFileToBeUploaded());
    
    HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(body, headers);
    
    RestTemplate restTemplate = new RestTemplate();
    ResponseEntity<String> response = restTemplate.postForEntity(serviveUrl, requestEntity, String.class);
    
    HttpHeaders=newhttpheaders();
    headers.setContentType(MediaType.MULTIPART\u FORM\u DATA);
    MultiValueMap body=新链接的MultiValueMap();
    add(“file”,getFileToBeUploaded());
    HttpEntity requestEntity=新的HttpEntity(主体、标题);
    RestTemplate RestTemplate=新RestTemplate();
    ResponseEntity response=restTemplate.postForEntity(服务URL、请求实体、字符串.class);
    
    但如何添加其他属性?我的控制器只接受UploadDocumentRequest类。uploadDocumentRequest.setDocumentClass(“DocClass”);uploadDocumentRequest.setDocumentProperties(documentProperties)@用户您可以将其他属性添加到
    HttpHeaders
    中,例如
    headers.add(headerName,headerValue)
    。但它将作为字符串对象。然后我必须将字符串对象转换为自定义对象。是否可以作为自定义对象直接发送?@User No!
    postForEntity
    的API无法接受自定义对象。