package com.ycsoft.web.commons.interceptor;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.opensymphony.xwork2.util.logging.Logger;
import com.opensymphony.xwork2.util.logging.LoggerFactory;
import com.ycsoft.beans.system.SOptr;
import com.ycsoft.business.commons.pojo.Parameter;
import com.ycsoft.commons.constants.Environment;
import com.ycsoft.commons.exception.ServicesException;
import com.ycsoft.commons.helper.JsonHelper;
import com.ycsoft.commons.helper.LoggerHelper;
import com.ycsoft.commons.helper.StringHelper;
import com.ycsoft.web.commons.abstracts.BaseBusiAction;
/**
* 该拦截器用于解析前台所提交的Json参数字符串。
* 将对应的参数字符串转换为Java Object。
* 并将解析的Object注入目标Action。
*
* @author hh
* @date Mar 9, 2010 6:23:48 PM
*/
public class JsonParamInterceptor extends AbstractInterceptor{
/**
*
*/
private static final long serialVersionUID = 1653745357462662878L;
protected transient Logger log = LoggerFactory.getLogger(getClass());
@Override
public String intercept(ActionInvocation invocation) throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
if(!(invocation.getAction() instanceof BaseBusiAction)){
return invocation.invoke();
}
BaseBusiAction bba = (BaseBusiAction)invocation.getAction();
//获取客户等通用信息
Object ps = request.getParameter( Environment.REQUEST_JSON_PARATEMER_STRING );
if( null != ps ){
process( bba , ps.toString() );
}
//将参数设置到request中,为Service的拦截器所使用
request.setAttribute( Environment.BUSIPARAM_INTERCEPT_KEY , bba.getParameter());
return invocation.invoke();
}
/**
* 对请求参数进行解析。并注入Action
* @param target 目标Action
* @param json 请求参数JSON字符串
*/
private void process(BaseBusiAction target , String json)throws Exception{
Parameter p = JsonHelper.toObject(json, target.getParameter().getClass());
//if("1040".equals(p.getBusiCode())){
//cfee缴费业务记录日志,用于串数据分析
//LoggerHelper.info("CFEE", JsonParamInterceptor.class,json);
//}
target.setParameter( p );
}
}