包含文件和正文的发布请求

时间:2019-12-13 08:59:34

标签: java resttemplate

我有一个Node.js服务器,我需要通过POST请求(使用Java RestTemplate创建)将文件和一些选项作为JSON主体发送到该Node.js服务器。

这是我的请求创建,其中printHtmlModel是我的身体,是JSON,而htmlAsByteArray是我要发送到Node.js服务器的HTML文件:

restTemplate = new RestTemplate();
uriComponents = UriComponentsBuilder.newInstance().scheme(scheme).host(domain).path(path).build();
DefaultUriBuilderFactory uriTemplateHandler = new DefaultUriBuilderFactory(uriComponents.toUriString());
restTemplate.setUriTemplateHandler(uriTemplateHandler);
restTemplate.setErrorHandler(new RestTemplateResponseErrorHandler());

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
headers.setAccept(Arrays.asList(MediaType.APPLICATION_PDF));

String bodystr = new ObjectMapper().writeValueAsString(printHtmlModel);

MultiValueMap<String, String> fileMap = new LinkedMultiValueMap<>();
ContentDisposition contentDisposition = ContentDisposition
                .builder("form-data")
                .name("htmlfile")
                .filename("newscontent.html")
                .build();

fileMap.add(HttpHeaders.CONTENT_DISPOSITION, contentDisposition.toString());
HttpEntity<byte[]> fileEntity = new HttpEntity<>(htmlAsByteArray, fileMap);

MultiValueMap<String, Object> files = new LinkedMultiValueMap<>();
files.add("file", fileEntity);
files.add("body",  bodystr);

HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(files, headers);

ResponseEntity<byte[]> response =
           restTemplate.exchange(StringUtils.EMPTY, HttpMethod.POST, requestEntity, byte[].class);
return response.getBody();

文件和主体都被接收,但是主体以非常奇怪的方式保存在Node.js请求对象中:

body:
 [Object: null prototype] { body: '{"pageFormat":"20.36cm_13.06cm"}' },

我已经阅读了有关Node.js的问题,这是由于结构化的POST请求导致的。如何通过Java中的RestTemplate正确分离正文和文件?

0 个答案:

没有答案