java-xml报文组装方式

java-xml报文组装方式xml报文组装方式提示:一般使用较多的有3种方式1.StringBuffer拼接代码如下(示例):StringBufferstr=newStringBuffer();str.append(“<?xmlversion=“1.0”encoding=“utf-8”?>”);str.append(“<request>”);str.append(“<name>”);//内容开始标签st

java-xml报文组装方式"

xml报文组装方式

提示:一般使用较多的有3种方式


1.StringBuffer拼接

代码如下(示例):

StringBuffer str = new StringBuffer();
        str.append("<?xml version=“1.0” encoding=“utf-8”?> ");
        str.append("<request>");
        str.append("<name>");// 内容开始标签
        str.append("张三");// 自定义的内容
        str.append("</name>");// 内容结束标签
        str.append("<type>");
        str.append("<Cancel – Other Reasons");
        str.append("</type>");
        str.append("</request>");
        log.info("生成的xml字符串信息:{}",str.toString());

2.XStream

这个主要的原理是,自定义每个层级标签的实体类,然后用xstream.toXML生成xml字符串。
按照层级组装好内容以后使用xstream.alias来自定义实体在xml中显示的标签。
代码如下(示例):

private <T> String  getRequestXml(T t) { 
   
		SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMdd");
		Date date = new Date();

		List<ResultLine> resultLines = new ArrayList();
		InboundResult inboundResult = new InboundResult();

		if(t instanceof PurchaseOrder){ 
   

			PurchaseOrder po = (PurchaseOrder) t;// 自定义的实体
			inboundResult.setPlant(po.getProducFactory());// 工厂编码
			inboundResult.setErpCode(po.getPurchaseNo()); // 销售单号
			inboundResult.setReceiveDate(sdf2.format(date));

			List<PurchaseOrderItem> itemList = po.getPoItem();
			itemList.forEach(item->{ 
   
				ResultLine resultLine = new ResultLine();
				resultLine.setItemCode(item.getOwnerCargoCode());
				resultLine.setItemName(item.getOwnerCargoName());
				resultLine.setUnit(item.getStockUnit());
				resultLine.setInboundQuantity(item.getPlanAmount()+"");
				resultLine.setBatchNumber(item.getBatchNo());
				if(null != item.getProduceDate()){ 
   
					resultLine.setProductionDate(sdf2.format(item.getProduceDate()));
				}
				resultLine.setWarehouse(po.getStockName());
				resultLines.add(resultLine);
			});
			inboundResult.setResultLines(resultLines);
		}
		Request request = new Request();// 最外层标签
		request.setInboundResult(inboundResult);
		XStream xstream = new XStream();
		xstream.alias("inboundResult", InboundResult.class);// 二级标签
		xstream.alias("resultLine", ResultLine.class);// 三级标签
		xstream.alias("request", Request.class);
		String requestXml = Request.dateInfo + xstream.toXML(request);
		Request.dateInfo // 是拼接的xml报文头
		// public static final String dateInfo ="<?xml version=\"1.0\" encoding=\"utf-8\"?>";
		log.info("生成的xml字符串信息:{}",requestXml);
		return requestXml;
	}

使用上述方式生成的xml字符串

<?xml version="1.0" encoding="utf-8"?><com.beiyun.wms.entity.LsfXmlDto.outboundReslut.Request>
  <inboundResult>
    <erpCode>KSTF2021029899</erpCode>
    <receiveDate>20210920</receiveDate>
    <resultLines>
      <resultLine>
        <itemCode>I-F303153-IE94-CN02</itemCode>
        <itemName>DANBAOLI</itemName>
        <warehouse>测试</warehouse>
        <unit></unit>
        <inboundQuantity>200.0</inboundQuantity>
      </resultLine>
      <resultLine>
        <itemCode>If003</itemCode>
        <itemName>DANBAOLI</itemName>
        <warehouse>测试</warehouse>
        <unit></unit>
        <inboundQuantity>50.0</inboundQuantity>
      </resultLine>
    </resultLines>
  </inboundResult>
</com.beiyun.wms.entity.LsfXmlDto.outboundReslut.Request>

3.使用注解

以下XStream的官方文档介绍链接:
链接: link.

这种方式使用跟方式二比较类似,只不过方式二是使用xstream.alias来将实体转化为自定义标签,而这种方式是通过在类跟属性字段上使用注解来自定义标签。

总结

以上三种方式均可,可以根据实际开发场景选择,比如方式1,当请求的参数较少的时候使用该方式比较好,当请求的参数较多时可以根据自己的习惯使用方式2、3都可以。

今天的文章java-xml报文组装方式分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/30303.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注