如何使用Spring RestTemplate发送XML POST请求?

2022-09-01 21:40:54

是否可以使用 发送请求,例如?XMLPOSTspringRestTemplate

我想将以下 xml 发送到网址localhost:8080/xml/availability

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

我还想在每个请求上动态添加自定义http标头(!)。

我怎样才能用春天做到这一点?


答案 1

首先,定义标头,如下所示:HTTP

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

您可以使用此方法设置任何标头。对于众所周知的标头,可以使用预定义的方法。例如,为了设置标头:HTTPContent-Type

headers.setContentType(MediaType.APPLICATION_XML);

然后定义一个 或 来准备您的请求对象:HttpEntityRequestEntity

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

如果您以某种方式访问该字符串,则可以使用 。否则,您可以定义一个与 该 .最后使用方法发送请求:XMLHttpEntity<String>XMLpostFor...

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

在这里,我将请求发送到端点,并将响应正文转换为.POSThttp://localhost:8080/xml/availabilityHTTPString

请注意,在上面的示例中,可以使用 JDK7 及更高版本进行替换new HttpEntity<String>(...)new HttpEntity<>(...)


答案 2

例如,在下面查找,以使用 RestTemplate 将 XML 交换为字符串并接收响应:

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);

推荐