Walmart (интеграция с Java)- пост-лента с Resttemplate
В настоящее время я интегрирую Walmart в наше приложение и пытаюсь опубликовать ленту статей с помощью метода API. Мне уже удалось опубликовать фид из инструмента ARC, поэтому я уже знаю, как смоделировать запрос на публикацию, моя единственная проблема в том, что у меня возникают трудности с использованием его в моем коде при использовании Resttemplate.
Ниже приведен запрос (от ARC - Chrome) о том, что мне удалось опубликовать мой товар (я вижу его на консоли продавца Walmart) и код Java для него (урезанные учетные данные по соображениям безопасности):
Obs: подпись и другие поля, используемые в Java-коде для запросов, сгенерированы правильно, потому что я также использовал их в своем запросе от ARC, поэтому нет никаких проблем в значениях заголовков, но в том, как я пытаюсь установите файл в теле запроса, насколько я могу судить:
И код для генерации заголовков и отправки пост-запроса с помощью Resttemplate:..............................
headers = new HttpHeaders();
headers.set("WM_SVC.NAME", "Walmart Marketplace");
headers.set("WM_QOS.CORRELATION_ID", "123456abcdef");
headers.set("WM_SEC.TIMESTAMP", timestamp);
headers.set("WM_SEC.AUTH_SIGNATURE", signatureString);
headers.set("WM_CONSUMER.ID", "my-consumer-id-cut-for-security-reasons");
headers.set("WM_CONSUMER.CHANNEL.TYPE", "my-channel-type");
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
headers.setAccept(Arrays.asList(MediaType.APPLICATION_XML));
headers.set("Host", "https://marketplace.walmartapis.com");
..............................
File file = new File("C:\\walmartfeed.xml");
DiskFileItem fileItem = new DiskFileItem("file", "text/xml", false, file.getName(), (int) file.length(), file.getParentFile());
fileItem.getOutputStream();
MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
MultiValueMap<String, Object> parts =
new LinkedMultiValueMap<String, Object>();
parts.add("file", new ByteArrayResource(multipartFile.getBytes()));
HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(parts, headers);
restTemplate.getMessageConverters().add(new FormHttpMessageConverter());
restTemplate.getMessageConverters().add(new ByteArrayHttpMessageConverter());
restTemplate.getMessageConverters().add(new MultipartAwareFormHttpMessageConverter());
ResponseEntity<FeedAcknowledgement> response = restTemplate.exchange("https://marketplace.walmartapis.com/v3/feeds?feedType=item", org.springframework.http.HttpMethod.POST, request, FeedAcknowledgement.class);
Я получаю код состояния 400, говорящий, что это неверный запрос. Удалось ли вам публиковать фиды для Walmart или есть какой-либо другой способ использовать Resttemplate для публикации multipart /form-data /files?
Спасибо