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