2016-07-25 80 views
1

我发布使用spring rest模板的JSON对象。它适用于较少的数据,但发布更多数据会引发Request URI太长的错误。使用Spring REST模板发布JSON对象

 final String url = getServiceUrl() + "/rs/doc?param1=test"; 

     RestTemplate restTemp=getRestTemplate(); 

     HttpHeaders headers = new HttpHeaders(); 
     headers.setContentType(org.springframework.http.MediaType.APPLICATION_JSON); 

     //set your entity to send 
     HttpEntity<MyBean> request = new HttpEntity<MyBean>(myBean,headers); 

     List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>(); 
     messageConverters.add(new MappingJacksonHttpMessageConverter()); 
     messageConverters.add(new FormHttpMessageConverter()); 
     restTemp.getMessageConverters().addAll(messageConverters); 

     // send it! 
     responseEntity = restTemp.exchange(url, HttpMethod.POST, request, String.class); 

请求主体应该在POST方法中接受无限数据。但这似乎并不适用于此。有人可以请指导。

回答

1

我为测试目的创建POST的方式是使用Spring提供的postForEntity方法。我将ResponseEntity设置为接受地图(ResponseEntity<Map>),并使用Map.class而不是String.class。这允许您在输入JSON数据时使用Key Value对(您可以使用HashMap)。这可能需要您将您的HttpEntity更改为Map,但您可以将Map设置为接受您设置的MyBean类。希望这可以帮助!

1

下面的工作对我来说很好。我在头文件中添加了安全细节,并在需要发送的帖子参数中添加了安全细节。

RestTemplate restTemplate = new RestTemplate(); 
HttpHeaders headers = new HttpHeaders(); 
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON)); 
headers.set(ApplicationConstants.API_KEY, ApplicationConstants.TEST_API_KEY_VALUE); 
headers.set(ApplicationConstants.AUTH_TOKEN, ApplicationConstants.TEST_API_TOKEN_VALUE); 
MultiValueMap<String, String> postParameters = new LinkedMultiValueMap<String, String>(); 
postParameters.add("purpose", cust.getPaymentPurpose()); 
postParameters.add("buyer_name", cust.getCustomerName()); 
postParameters.add("email", cust.getCustomerEmailId()); 
postParameters.add("phone", cust.getCustomerMobNum()); 
postParameters.add("send_email", "False"); 
postParameters.add("send_sms", "False"); 
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<MultiValueMap<String, String>>(postParameters, headers); 
ResponseEntity<String> result = restTemplate.exchange("YOUR URL", HttpMethod.POST, requestEntity, String.class); 
OnlinePaymentModel paymentModel = gson.fromJson(result.getBody(), OnlinePaymentModel.class);