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数据
    }
相关推荐
weixin_436525077 分钟前
芋道框架 账号未登录、租户标识未传递
java·linux·服务器
magic 24510 分钟前
第2章——springboot核心机制
java·spring boot·spring
YKPG10 分钟前
C++学习-入门到精通-【5】类模板array和vector、异常捕获
java·c++·学习
一只蒟蒻ovo15 分钟前
操作系统导论——第27章 插叙:线程API
java·开发语言
斯普润布特18 分钟前
Java-很深我只知其一构造(Builder)
java·开发语言
JAVA学习通31 分钟前
Tomcat
java·tomcat
Lu Yao_1 小时前
golang -- 如何获取变量类型
android·java·golang
二十雨辰1 小时前
[Spring]-认识Spring
java·数据库·spring
eguid_11 小时前
WebRTC流媒体传输协议RTP点到点传输协议介绍,WebRTC为什么使用RTP协议传输音视频流?
java·网络协议·音视频·webrtc·实时音视频
码农娟1 小时前
根据文件路径获取base64照片
java