[SPRING] Spring RestTemplate으로 XML POST 요청을 보내는 방법?
SPRINGSpring RestTemplate으로 XML POST 요청을 보내는 방법?
RestTemplate과 같이 봄에 XML POST 요청을 보낼 수 있습니까?
로컬 호스트 url에 다음 xml을 보내려고합니다. 8080 / xml / availability
<AvailReq>
<hotelid>123</hotelid>
</AvailReq>
또한 각 요청에 동적으로 사용자 정의 http 헤더를 추가하고 싶습니다 (!).
나는 이것을 봄에 어떻게 성취 할 수 있습니까?
해결법
-
==============================
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.아래에서 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.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);
from https://stackoverflow.com/questions/35461148/how-to-send-xml-post-requests-with-spring-resttemplate by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Websocket : 대상 사용자에게 메시지를 푸시하는 방법 (0) | 2019.03.27 |
---|---|
[SPRING] 프로그래밍 방식으로 Grails 서비스의 인스턴스를 얻으려면 어떻게해야합니까? (0) | 2019.03.27 |
[SPRING] 스프링 MVC - 정적 파일 / 자바 스크립트, CSS 포함 (0) | 2019.03.27 |
[SPRING] Spring 부트 2로 마이그레이션 - 보안 인코딩 된 암호가 BCrypt처럼 보이지 않음 (0) | 2019.03.27 |
[SPRING] 외부 IP 주소에서 웹 서버에 액세스 할 수 있도록 spring-boot를 설정하는 방법 (0) | 2019.03.27 |