我目前正在将沃尔玛集成到我们的应用程序中,并且我正在尝试通过API方法发布项目Feed。 我已经成功地从ARC工具发布了一个feed,所以我已经知道如何为它的post请求建模,我唯一的问题是我在使用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发布多部分/表单数据/文件?
由于