2016-07-25 4 views
1

spring rest 템플릿을 사용하여 JSON 객체를 게시하고 있습니다. 그것은 적은 데이터를 위해 잘 작동하지만, 더 많은 데이터를 게시하면 Request URI가 너무 오랫동안 에러가됩니다.Spring REST 템플릿을 사용하는 POST 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>)를 허용하도록 설정하고 String.class 대신 Map.class을 사용했습니다. 이렇게하면 JSON 데이터를 입력 할 때 키 값 쌍을 사용할 수 있습니다 (HashMap을 사용할 수 있음). HttpEntity를 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);