Java封装xml格式参数请求第三方接口

Java封装xml格式参数请求第三方接口


1、引用包

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.StringWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

2、封装方法生成xml格式文本

里面用到了两个方法

1、getStringFromDocument,从Document对象转换为String字符串返回。

2、createElementWithValue,给某个节点创建子节点并赋值。

这是我写的例子和模板样例

public String getXmlParam(BpMaster bpMaster) {
        String RawXml = null;   // 返回值
        try {
            // 创建xml对象
            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
            Document doc = docBuilder.newDocument();

            // 创建根节点
            Element ufinterface = doc.createElement("ufinterface");
            ufinterface.setAttribute("account", "develop");	// 设置属性
            ufinterface.setAttribute("billtype", "customer");
            doc.appendChild(ufinterface);
            // 创建 bill节点
            Element bill = doc.createElement("bill");
            ufinterface.appendChild(bill);  // 添加bill节点
            bill.setAttribute("id", "");	// 设置属性
            // 创建 billhead
            Element billhead = doc.createElement("billhead");
            bill.appendChild(billhead);	// 添加 billhead 到 bill下
            // 添加billhead子节点和text值
            createElementWithValue(doc, billhead, "pk_group", String.valueOf(bpMaster.getParentCompanyId()));
            // 规范化XML文档
            doc.getDocumentElement().normalize();
            // 获取XML原文
            RawXml = getStringFromDocument(doc);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return RawXml;
    }
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class XMLGenerator {
    public static void main(String[] args) {
        try {
            // Create the XML document
            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
            Document doc = docBuilder.newDocument();

            // Create the root element
            Element ufinterface = doc.createElement("ufinterface");
            ufinterface.setAttribute("account", "develop");
            ufinterface.setAttribute("billtype", "customer");
            ufinterface.setAttribute("isexchange", "Y");
            ufinterface.setAttribute("sender", "sys001");
            doc.appendChild(ufinterface);

            // Create the bill element
            Element bill = doc.createElement("bill");
            ufinterface.appendChild(bill);

            // Create the billhead element
            Element billhead = doc.createElement("billhead");
            bill.appendChild(billhead);

            // Add the elements and their values
            createElementWithValue(doc, billhead, "pk_group", "uap60");
            createElementWithValue(doc, billhead, "pk_org", "uap60");
            createElementWithValue(doc, billhead, "code", "customer_pfxx");
            createElementWithValue(doc, billhead, "name", "customer_pfxx");
            // Add other elements and their values...

            // Output the XML document
            doc.getDocumentElement().normalize();
            System.out.println(getStringFromDocument(doc));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void createElementWithValue(Document doc, Element parent, String tagName, String value) {
        Element element = doc.createElement(tagName);
        element.appendChild(doc.createTextNode(value));
        parent.appendChild(element);
    }

    private static String getStringFromDocument(Document doc) {
        try {
            StringWriter writer = new StringWriter();
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            transformer.transform(new DOMSource(doc), new StreamResult(writer));
            return writer.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

3、getStringFromDocument

/**
     * @description: 转换Document对象为String并返回
     * @author: chuanwei.yang 42624
     * @date: 2023/6/26 15:10
     * @param: doc
     * @return: * @return: java.lang.String
     **/
    private String getStringFromDocument(Document doc) {
        try {
            // 接收转换后的字符串结果
            StringWriter writer = new StringWriter();
            // 生成进行XML文档转换对象
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            // 不省略XML声明
            transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
            // 对输出结果进行缩进处理
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            // 将Document对象表示的XML文档内容转换为字符串,并写入到StringWriter对象中
            transformer.transform(new DOMSource(doc), new StreamResult(writer));
            // 将转换后的XML内容作为字符串返回
            return writer.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

4、createElementWithValue

/**
 * @description: 构建XML文件使用,创建子节点和值。
 * @author: chuanwei.yang 42624
 * @date: 2023/6/26 15:06
 * @param: doc
 * @param: parent
 * @param: tagName
 * @param: value
 * @return: * @return: void
 **/
private void createElementWithValue(Document doc, Element parent, String tagName, String value) {
    Element element = doc.createElement(tagName);
    element.appendChild(doc.createTextNode(value));
    parent.appendChild(element);
}

5、发起请求

拼接xml格式的参数请求接口。

RawXml变量 是生成的xml参数文本。

String RawXml = getStringFromDocument(doc);	// 调用方法生成xml文本
			String apiUrl = "接口地址";
            try {
                // 创建URL对象和HttpURLConnection连接
                URL url = new URL(apiUrl);
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();

                // 设置请求方法为POST
                connection.setRequestMethod("POST");

                // 设置请求头信息
                connection.setRequestProperty("Content-Type", "application/xml");

                // 启用输出流,并写入XML数据
                connection.setDoOutput(true);
                OutputStream outputStream = connection.getOutputStream();
                outputStream.write(RawXml.getBytes(StandardCharsets.UTF_8));
                outputStream.close();

                // 发送请求并获取响应
                int responseCode = connection.getResponseCode();    // 获取响应码
                // 获取响应报文
                BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                String line;
                StringBuilder response = new StringBuilder();
                while ((line = reader.readLine()) != null) {
                    response.append(line);
                }
                reader.close();
                // 输出响应结果
                System.out.println("Response Code: " + responseCode);
                System.out.println("Response Body: " + response.toString());
            } catch (Exception e) {
                e.printStackTrace();
            }

6、实现效果

最终生成的xml文件如下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在Spring Boot项目中新增一个第三方API并以JSON格式返回给前端可以按照以下步骤进行: 1. 导入相关依赖:在项目的pom.xml文件中添加对相关依赖的引用,例如使用RestTemplate来发送HTTP请求,可以添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` 2. 创建一个Controller:在项目中创建一个Controller类,用于处理前端的请求和返回JSON数据。可以使用`@RestController`注解标记该类,并使用`@RequestMapping`注解指定API的URL路径。 3. 调用第三方API:在Controller中使用`RestTemplate`发送HTTP请求调用第三方API,并获取返回的数据。可以使用`getForObject()`方法发送GET请求,或者使用`postForObject()`方法发送POST请求。 4. 封装返回结果:将从第三方API获取到的数据封装到一个自定义的Java对象中,并使用`@ResponseBody`注解将该对象转换为JSON格式返回给前端。可以使用`ResponseEntity`类来包装返回结果,设置相应的HTTP状态码和响应头信息。 以下是一个示例代码: ```java import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController @RequestMapping("/api") public class ThirdPartyApiController { @GetMapping("/data") public ResponseEntity<Object> getDataFromThirdPartyApi() { RestTemplate restTemplate = new RestTemplate(); String apiUrl = "http://third-party-api.com/data"; // 第三方API的URL // 发送HTTP请求调用第三方API Object response = restTemplate.getForObject(apiUrl, Object.class); // 封装返回结果并以JSON格式返回给前端 return ResponseEntity.ok(response); } } ``` 在上面的示例中,当访问`/api/data`路径时,将会调用第三方API并将其返回的数据以JSON格式返回给前端。 请注意,上述代码仅为示例,实际应用中可能还需要进行异常处理、参数校验等操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

靠谱杨

感谢您的认可和鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值