Java实现接收xml格式数据并解析,返回xml格式数据

需求描述:后端接受xml格式数据,解析出相应数据,并返回xml格式数据。

xml 复制代码
		<!--XML解析-->
		<dependency>
			<groupId>com.fasterxml.jackson.dataformat</groupId>
			<artifactId>jackson-dataformat-xml</artifactId>
		</dependency>
		<dependency>
			<groupId>com.thoughtworks.xstream</groupId>
			<artifactId>xstream</artifactId>
			<version>1.4.9</version>
		</dependency>
java 复制代码
package com.zlp.cps.dto;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.Data;

/**
 * 接收xml格式数据解析类
 * 
 * @author zlp
 * @date 2023/8/25
 **/
@Data
@XStreamAlias("xml")
public class WxUserMessageModel {

    @XStreamAlias("ToUserName")
    private String toUserName;
    @XStreamAlias("FromUserName")
    private String fromUserName;

    @XStreamAlias("CreateTime")
    private Long createTime;

    @XStreamAlias("MsgType")
    private String msgType;

    @XStreamAlias("Content")
    private String content;

    @XStreamAlias("MsgId")
    private String msgId;

    @XStreamAlias("Title")
    private String title;

    @XStreamAlias("Description")
    private String description;

    @XStreamAlias("Url")
    private String url;

    /**
     * 订阅或者取消订阅的事件
     */
    @XStreamAlias("Event")
    private String event;

    @XStreamAlias("EventKey")
    private String eventkey;
}
java 复制代码
    public String acceptMsg(HttpServletRequest request, ServletResponse response) {
        // 数据提取
        StringBuffer reqXmlData = new StringBuffer();
        try {
            InputStream inputStream = request.getInputStream();
            String s;
            BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
            while ((s = in.readLine()) != null) {
                reqXmlData.append(s);
            }
            in.close();
            inputStream.close();
        } catch (IOException e) {
            System.out.println("流解析xml数据异常!");
            e.printStackTrace();
        }
        //判断请求数据是否为空
        if (reqXmlData.length() <= 0) {
            System.out.println("请求数据为空!");
        }
        //json类型数据
        JSONObject jsonObject = XML.toJSONObject(reqXmlData.toString());
        log.info("xml :{}", jsonObject.toString());
        Object obj = jsonObject.get("xml");
        JSONObject data = JSONUtil.parseObj(obj);
        String fromUserName = data.get("FromUserName").toString();
        String toUser = data.get("ToUserName").toString();
        String context = data.get("Content").toString();

        // 返回数据
        WxUserMessageModel responseXmlData = new WxUserMessageModel();
        responseXmlData.setToUserName(fromUserName);
        responseXmlData.setFromUserName(toUser);
        responseXmlData.setCreateTime(System.currentTimeMillis());
        responseXmlData.setMsgType("text");
        // 按需编写业务
        if (context.startsWith(GzhConstant.tbSearch)) {
            String[] split = context.split("\\+");
            context = split[1];
            long pageNum = 1L;
            if (split.length > 2) {
                pageNum = Long.parseLong(split[2]);
            }
            // 调用淘宝商品搜索服务
            TbCpsReq req = new TbCpsReq();
            req.setKeyword(context);
            req.setPageNum(pageNum);
            req.setPageSize(8L);
            BaseResponse search = tbCpsService.search(req);
            List<TbMaterialData> list = (List<TbMaterialData>) search.getData();
            if (ListUtil.isEmpty(list)) {
                context = "该商品暂时没有优惠券";
            } else {
                context = convertSearchToMsg(list);
            }
        } else if (context.startsWith(GzhConstant.pddSearch)) {
            context = "拼多多搜索服务升级中!!!";
        } else if (context.startsWith(GzhConstant.jdSearch)) {
            context = "京东搜索服务升级中!!!";
        } else {
            return GzhConstant.defaultReply;
        }

        responseXmlData.setContent(context);

        XStream xstream = new XStream();
        xstream.processAnnotations(WxUserMessageModel.class);
        xstream.setClassLoader(WxUserMessageModel.class.getClassLoader());
        log.info("return xml : {}", xstream.toXML(responseXmlData));
        return xstream.toXML(responseXmlData);  //XStream的方法,直接将对象转换成 xml数据
    }
相关推荐
笨蛋不要掉眼泪4 小时前
RabbitMQ消息队列:SpringAMQP
java·分布式·rabbitmq
Mark_ZP4 小时前
【锁6】AQS (AbstractQueuedSynchronizer) 核心原理详解
java
AI砖家5 小时前
多商户多租户系统架构设计文档(Java版)
java·开发语言·系统架构·多租户·多商户
落苜蓿蓝5 小时前
Java 循环中对象复用导致属性覆盖?从 JVM 内存模型讲解原因
java·jvm·python
weixin_440784115 小时前
Android基础知识汇总
android·java·android studio
布鲁飞丝5 小时前
从零实现富文本编辑器#-浏览器选区与编辑器选区模型同步
java·前端·编辑器
jun_bai6 小时前
使用java安全的移动文件
java
caishenzhibiao6 小时前
市场同步系统 同花顺期货通指标
java·c语言·c#
Devin~Y6 小时前
从本地生活电商到 AI RAG:互联网大厂 Java 面试场景完整实战
java·spring boot·redis·elasticsearch·spring cloud·kafka·rag
520拼好饭被践踏6 小时前
JAVA+Agent学习day25
java·开发语言·学习