使用Spring RestTemplate进行POST时400 BAD请求

时间:2015-04-23 09:52:57

标签: java spring resttemplate

我尝试将发货状态从我的数据库发送到电子商务网站,但我得到:

  

400错误请求错误。

有没有人有任何想法?

HashMap orderItems = new HashMap<String, String>();
orderItems.put("id","558443685");
ArrayList<HashMap<String,String>> orderItemsArray = new ArrayList<HashMap<String,String>>();
orderItemsArray.add(orderItems);
HashMap contentOrderFulfillment = new HashMap<String, Object>();
contentOrderFulfillment.put("tracking_number", null);
contentOrderFulfillment.put("line_items",orderItemsArray);
HashMap orderFulfillment = new HashMap<String, Object>();
orderFulfillment.put("fulfillment", contentOrderFulfillment);

RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
restTemplate.getMessageConverters().add(new StringHttpMessageConverter());

HttpHeaders headers = new HttpHeaders();
headers.add("X-ABC-Access-Token", "9a4d5c56a7edf1ac5bb17aa1c");
headers.add("Content-Type", MediaType.APPLICATION_JSON.toString());
headers.add("Accept", MediaType.APPLICATION_JSON.toString());

MultiValueMap<String, Object> requestBody = new LinkedMultiValueMap<String, Object>();
requestBody.add("fulfillment", orderFulfillment);
HttpEntity formEntity = new HttpEntity<MultiValueMap<String, Object>>(requestBody, headers);
restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
ResponseEntity<String> responseEntity = restTemplate.exchange("https://mysite.abc.com/admin/orders/406287121/fulfillments.json",HttpMethod.POST,  formEntity,String.class);
System.out.println("Response="+responseEntity.getBody());

2 个答案:

答案 0 :(得分:0)

请求中的许多问题都可能导致400响应。错误的参数或类似的东西。首先从命令行尝试请求 - 使用curl或其他东西。当您看到它工作时,检查来自java的请求是否具有完全相同的参数发送。

答案 1 :(得分:0)

如果扩展该处理程序,请查看ResponseEntityExceptionHandler(或任何后代)。

处理程序的大多数方法都不包含消息体,因此解决方案是扩展该类,覆盖处理您希望获取错误消息的异常的方法,并提供消息体到handleExceptionInternal(..)方法。

另见: