복붙노트

[SPRING] Spring RestTemplate으로 XML POST 요청을 보내는 방법?

SPRING

Spring RestTemplate으로 XML POST 요청을 보내는 방법?

RestTemplate과 같이 봄에 XML POST 요청을 보낼 수 있습니까?

로컬 호스트 url에 다음 xml을 보내려고합니다. 8080 / xml / availability

<AvailReq>
  <hotelid>123</hotelid>
</AvailReq>

또한 각 요청에 동적으로 사용자 정의 http 헤더를 추가하고 싶습니다 (!).

나는 이것을 봄에 어떻게 성취 할 수 있습니까?

해결법

  1. ==============================

    1.먼저 다음과 같이 HTTP 헤더를 정의하십시오.

    먼저 다음과 같이 HTTP 헤더를 정의하십시오.

    HttpHeaders headers = new HttpHeaders();
    headers.add("header_name", "header_value");
    

    이 방법으로 모든 HTTP 헤더를 설정할 수 있습니다. 잘 알려진 헤더의 경우 미리 정의 된 메서드를 사용할 수 있습니다. 예를 들어, Content-Type 헤더를 설정하려면 다음과 같이하십시오.

    headers.setContentType(MediaType.APPLICATION_XML);
    

    그런 다음 HttpEntity 또는 RequestEntity를 정의하여 요청 객체를 준비합니다.

    HttpEntity<String> request = new HttpEntity<String>(body, headers);
    

    XML 문자열에 액세스 할 수있는 경우 HttpEntity 을 사용할 수 있습니다. 그렇지 않으면 해당 XML에 해당하는 POJO를 정의 할 수 있습니다. 마지막으로 postFor ... 메소드를 사용하여 요청을 보냅니다.

    ResponseEntity<String> response = restTemplate.postForEntity("http://localhost:8080/xml/availability", request, String.class);
    

    여기에 요청을 http : // localhost : 8080 / xml / availability 끝점에 게시하고 HTTP 응답 본문을 String으로 변환합니다.

    위의 예제에서 JDK7 이상을 사용하여 새로운 HttpEntity (...)을 새로운 HttpEntity <> (...)로 바꿀 수 있습니다.

  2. ==============================

    2.아래에서 RestTemplate을 사용하여 XML 문서를 교환하고 HTML 응답을 수신하는 방법에 대한 완전한 예를 찾을 수 있습니다.

    아래에서 RestTemplate을 사용하여 XML 문서를 교환하고 HTML 응답을 수신하는 방법에 대한 완전한 예를 찾을 수 있습니다.

    import static org.hamcrest.Matchers.is;
    import static org.junit.Assert.assertThat;
    import static org.springframework.test.web.client.match.MockRestRequestMatchers.header;
    import static org.springframework.test.web.client.match.MockRestRequestMatchers.content;
    import static org.springframework.test.web.client.match.MockRestRequestMatchers.method;
    import static org.springframework.test.web.client.match.MockRestRequestMatchers.requestTo;
    import static org.springframework.test.web.client.response.MockRestResponseCreators.withSuccess;
    
    import org.junit.Test;
    import org.springframework.http.HttpEntity;
    import org.springframework.http.HttpHeaders;
    import org.springframework.http.HttpMethod;
    import org.springframework.http.MediaType;
    import org.springframework.http.ResponseEntity;
    import org.springframework.test.web.client.MockRestServiceServer;
    import org.springframework.web.client.RestTemplate;
    import org.w3c.dom.Document;
    import org.xml.sax.InputSource;
    
    import java.io.StringReader;
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    
    public class XmlTest {
    
        @Test
        public void test() throws Exception {
            RestTemplate restTemplate = new RestTemplate();
            MockRestServiceServer mockServer = MockRestServiceServer.createServer(restTemplate);
            String htmlString = "<p>response</p>";
            String xmlString = "<?xml version=\"1.0\" encoding=\"utf-8\"?><AvailReq><hotelid>123</hotelid></AvailReq>";
    
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document document = builder.parse(new InputSource(new StringReader(xmlString)));
    
            mockServer.expect(requestTo("http://localhost:8080/xml/availability"))
                    .andExpect(method(HttpMethod.POST))
                    .andExpect(content().string(is(xmlString)))
                    .andExpect(header("header", "value"))
                    .andRespond(withSuccess("<p>response</p>", MediaType.TEXT_HTML));
    
            HttpHeaders headers = new HttpHeaders();
            headers.add("header", "value");
            HttpEntity<Document> request = new HttpEntity<>(document, headers);
    
            final ResponseEntity<String> response = restTemplate.postForEntity("http://localhost:8080/xml/availability", request, String.class);
    
            assertThat(response.getBody(), is(htmlString));
            mockServer.verify();
        }
    }
    
  3. ==============================

    3.RestTemplate을 사용하여 XML을 String으로 교환하고 응답을 수신하는 예를 아래에서 찾으십시오.

    RestTemplate을 사용하여 XML을 String으로 교환하고 응답을 수신하는 예를 아래에서 찾으십시오.

    String xmlString = "<?xml version=\"1.0\" encoding=\"utf-8\"?><AvailReq><hotelid>123</hotelid></AvailReq>";
    
        RestTemplate restTemplate =  new RestTemplate();
        //Create a list for the message converters
        List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
        //Add the String Message converter
        messageConverters.add(new StringHttpMessageConverter());
        //Add the message converters to the restTemplate
        restTemplate.setMessageConverters(messageConverters);
    
    
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_XML);
        HttpEntity<String> request = new HttpEntity<String>(xmlString, headers);
    
        final ResponseEntity<String> response = restTemplate.postForEntity("http://localhost:8080/xml/availability", request, String.class);
    
  4. from https://stackoverflow.com/questions/35461148/how-to-send-xml-post-requests-with-spring-resttemplate by cc-by-sa and MIT license