Struts2 Action 解析提交的XML

本文详细介绍了如何解析Dianping接口返回的XML数据,包括订单号、下单时间、商品数量、订单总金额等关键信息,并通过自定义的BiOrderProd类进行数据封装。接着,实现订单的入库操作,并构造回传URL,通过调用Util.getHTMLByUrl方法发送请求。最后,展示了获取响应结果的过程及处理逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


package com.bjdata.bjsearch.presentation.action.thirdinter;

import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletInputStream;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

import com.bjdata.bjsearch.persistence.stroremanage.order.dao.impl.BiOrderProd;
import com.bjdata.bjsearch.persistence.stroremanage.order.service.IOrderService;
import com.bjdata.bjsearch.presentation.action.BaseAction;
import com.bjdata.bjsearch.util.Misc;
import com.bjdata.bjsearch.util.Util;
import com.bjdata.util.SecurityUtils;

public class DianpingInter extends BaseAction{
private static final String LEAGUETYPE = "dianping";
private static final Long STOREID = 4672143L;
private static final double PERCENT=0.04;
private String result;

public String execute() {
IOrderService orderService = (IOrderService) this.getServiceBean("orderService");
//成功
result = "succ";
try {
//解析xml
ServletInputStream in = this.getRequest().getInputStream();
BiOrderProd prod = new BiOrderProd();
prod.setStoreid(STOREID);
prod.setPmid(String.valueOf(STOREID));
prod.setProductcode("1");
prod.setProductid("-1");
prod.setUserid(0l);
prod.setLeaguetype(LEAGUETYPE);
prod.setTaskid("0");
prod.setGetway("1");
prod.setStatus("0");

//解析 xml后 将值 给prod 了
readXML(in,prod);
// prod.setAmount(1);
// prod.setOrderid(orderid);
// prod.setOrdertime(Misc.convertString2Date(orderdate.trim(), "yyyy-MM-dd HH:mm:ss"));
// prod.setMoney(dprice);
// prod.setUserinfo(ouid);
prod.setPrice(prod.getMoney()/prod.getAmount());
prod.setCommision(prod.getMoney() * PERCENT);
orderService.saveBiOrderProd(prod);
String ordertime=Misc.convertTimestamp2StringTime(prod.getOrdertime(), "yyyy-MM-dd20%HH:mm:ss");
StringBuffer urlBuffer = new StringBuffer("http://192.168.0.88:8080/myweb/orderback.jhtml?ordergetFlag=0&bid=502990&leagueflag=");
urlBuffer.append(LEAGUETYPE).append("&cost=").append(prod.getMoney()).append("&oid=").append(prod.getOrderid()).append("&ordertime=");
urlBuffer.append(ordertime).append("&uid=").append(prod.getUserinfo()).append("&cback=").append(prod.getCommision());
urlBuffer.append("&mcode=").append(SecurityUtils.md5ByHex(prod.getUserinfo() + prod.getOrderid()));
//send
String re = Util.getHTMLByUrl(urlBuffer.toString(), 30000, "utf-8");
if(!"0".equals(re))
result = "0";

} catch (Exception e) {
e.printStackTrace();
result = "3";
}
return HINT;
}

private void readXML(ServletInputStream in,BiOrderProd prod){
SAXReader saxReader=new SAXReader();
try {
Document document=saxReader.read(new InputStreamReader(in,"UTF-8"));
List<Element> list=document.selectNodes("/order");
System.out.println(list.size());
Iterator<Element> iter=list.iterator();
if(iter.hasNext()) {
Element root=iter.next();
//订单号
Node oid=root.selectSingleNode("/order/id");
prod.setOrderid(oid.getText());
//下单时间
Node otime=root.selectSingleNode("/order/order_time");
prod.setOrdertime(Misc.convertString2Date(otime.getText(), "yyyy-MM-dd HH:mm:ss"));
//商品数
Node pnums=root.selectSingleNode("/order/number");
prod.setAmount(Integer.parseInt(pnums.getText().trim()));
//订单总金额
Node amount=root.selectSingleNode("/order/cost/total_amount");
prod.setMoney(Double.parseDouble(amount.getText().trim()));
//跟单uid
Node uid=root.selectSingleNode("/order/user/trackingcode");
prod.setUserinfo(uid.getText());
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}


public String getResult() {
return result;
}

public void setResult(String result) {
this.result = result;
}

}


<order>
<id>1234563</id>
<user>
<channelcode>{例如baidu_wap}</channelcode>
<trackingcode>{例如uid=123456}</trackingcode>
</user>

<product>
<deal>{123142}</deal>
</product>

<order_time>yyyy-MM-dd HH:mm:ss</order_time>
<pay_time>{yyyy-MM-dd HH:mm:ss|}</pay_time>
<status>{ORDER|PAID}</status>
<number>2</number>

<cost>
<total_amount>120.2</total_amount>
</cost>

</order>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值