Java工具类:使用RestTemplate请求WebService接口

目录

    • 一、场景
    • 二、工具类

一、场景

对接第三方提供的WebService接口,早期的调用方式过于复杂繁琐,所以使用RestTemplate进行调用


二、工具类

package com.xxx.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.client.RestTemplate;

/**
 * WebService请求工具类
 *
 * @author hcs
 *
 * @date 2024/1/19 11:18
 */
public class WebServiceRequestUtil {

    private static Logger logger = LoggerFactory.getLogger(WebServiceRequestUtil.class);

    private static RestTemplate restTemplate = SpringUtil.getBean(RestTemplate.class);
	
	/**
     * 发起webservice请求
     * 
     * @param url
     * @return
     */
    public static String webServiceRequest(String url) {
        // 创建一个请求头对象
        HttpHeaders headers = new HttpHeaders();
        // 设置请求头对象contentTyp的为text/xml;charset=UTF-8
        MediaType type = MediaType.parseMediaType("text/xml;charset=UTF-8");
        headers.setContentType(type);

        // 将请求参数进行封装并进行远程接口服务调用
        // 构造webservice请求参数
        // 请求参数,根据实际情况进行配置,以下仅作为示例
        StringBuilder requestData = new StringBuilder();
        requestData.append("<?xml version="1.0" encoding="utf-8"?>");
        requestData.append("<soapenv:Envelope xmlns:soapenv="http://根据实际情况配置" xmlns:esb="http://根据实际情况配置">");
        requestData.append("<soapenv:Header/>");
        requestData.append("<soapenv:Body>");

        // 请求参数,根据实际情况进行配置,以下仅作为示例
        requestData.append("<ESB_USER>").append("zhangsan").append("</ESB_USER>");
        requestData.append("<ESB_PWD>").append("123456").append("</ESB_PWD>");

        requestData.append("</soapenv:Body>");
        requestData.append("</soapenv:Envelope>");

        logger.info("请求报文为:" + requestData.toString());
        logger.info("url:" + url);

        try {
            // 创建请求
            HttpEntity<String> request = new HttpEntity<>(requestData.toString(), headers);

            // 发送post请求并获取到响应结果
            String str = restTemplate.postForObject(url, request, String.class);

            logger.info("-----------Response content-----------: " + str);
            return str;
        } catch (Exception e) {
            logger.error("baseWebServiceRequest出现异常:" + e.getMessage(), e);
        }

        return null;
    }
}


注:除了RestTemplate之外,HttpURLConnection等也可以用来调用webservice接口

如果需要将xml转为Json,可参考:http://t.csdnimg.cn/thZzN