当前位置: 代码迷 >> Java Web开发 >> 支付宝notify_url,配置替自己写的springMVC的action后,调用service时报属性注入的Dao为null
  详细解决方案

支付宝notify_url,配置替自己写的springMVC的action后,调用service时报属性注入的Dao为null

热度:46   发布时间:2016-04-13 22:17:31.0
支付宝notify_url,配置为自己写的springMVC的action后,调用service时报属性注入的Dao为null,
Android端:

// 服务器异步通知页面路径
// orderInfo += "&notify_url=" + "\"" + "http://notify.msp.hk/notify.htm"
orderInfo += "&notify_url=" + "\"" + "http://yanlong10829.imwork.net:10019/joinlock/payManage/lockOrderPayNotifyByAli.do"

java服务器端action:

/**支付宝支付完门锁订单后的逻辑(安装门锁)*/
@RequestMapping("/lockOrderPayNotifyByAli")
public void lockOrderPayNotify(HttpServletRequest request, Model model, HttpServletResponse response) {//获取支付宝POST过来反馈信息

//获取支付宝POST过来反馈信息
Map<String,String> params = new HashMap<String,String>();
Map requestParams = request.getParameterMap();
for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i]
: valueStr + values[i] + ",";
}
//乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化
// try {
// valueStr = new String(valueStr.getBytes("ISO-8859-1"), "UTF-8");
// } catch (UnsupportedEncodingException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// toWeb(response, "fail");
// }
params.put(name, valueStr);
}

//获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)//
//商户订单号

/*String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");

//支付宝交易号

String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");*/

//交易状态
String trade_status="";
try {
trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
toWeb(response, "fail");
}
// String trade_status = (String) requestParams.get("trade_status");
System.out.println("trade_status:"+trade_status);
//获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以上仅供参考)//
PayService payService = new PayServiceImpl();
if(AlipayNotify.verify(params)){//验证成功
//////////////////////////////////////////////////////////////////////////////////////////
//请在这里加上商户的业务逻辑程序代码
if(trade_status.equals("TRADE_FINISHED") || trade_status.equals("TRADE_SUCCESS")){
System.out.println(" to do service");
payService.lockOrderPayNotifyByAli(params);
}
System.out.println("not  to do service");
toWeb(response, "success");
//////////////////////////////////////////////////////////////////////////////////////////
}else{//验证失败
// out.println("fail");
System.out.println("verify fail ");
toWeb(response, "fail");
}

return ;

}

java服务器service

@Service("payService")
public class PayServiceImpl implements PayService {
@Autowired
private LockOrderDao<LockOrder> lockOrderDao;
@Autowired
private UserJournalAccountDaoImpl<UserJournalAccount> userJournalAccountDao;

public AppMsgVO lockOrderPayNotifyByAli(Map requestParams) {
AppMsgVO vo = new AppMsgVO();
vo.setCode(AppMsgVO.code_error);
System.out.println("change my order status ");
String out_trade_no = (String) requestParams.get("out_trade_no");
System.out.println("out_trade_no:"+out_trade_no);
String trade_no = (String) requestParams.get("trade_no");
Map params = new HashMap();
params.put("out_trade_no", out_trade_no);
System.out.println(lockOrderDao);
LockOrder lockOrder = lockOrderDao.get(" from LockOrder lo where lo.order_seq=:out_trade_no ", params);
if(lockOrder!=null && lockOrder.getOrder_state().equalsIgnoreCase(LockOrder.order_state_unPay)){
lockOrder.setOrder_state(LockOrder.order_state_payUnInstall);
lockOrder.setTrade_no(trade_no);
lockOrderDao.update(lockOrder);

vo.setCode(AppMsgVO.code_sucess);
}

return vo;
}

支付宝来调用时dao为null;我写另外一个方法自己来调用的话dao就不为空

@RequestMapping("/test")
public void test(HttpServletRequest request, Model model, HttpServletResponse response) {
Map params = new HashMap();
String key = request.getParameter("key");
params.put("out_trade_no", key);
params.put("trade_no", "00000");
payService.lockOrderPayNotifyByAli(params);


return;
}


------解决思路----------------------
        PayService payService = new PayServiceImpl();

问题出在这,用注入的方式。
------解决思路----------------------
确实应该是PayService payService = new PayServiceImpl();这问题,应用注入@Autowired 如果还有问题,就是没配置好了,把配置文件发出来看看
  相关解决方案