您的位置:首页 > 编程语言 > Java开发

让JSON请求和参数请求一样,可以通过Struts2的模型驱动给Action的类成员变量赋值(字段驱动与模型驱动)

2010-07-11 13:26 519 查看
自己定义一个拦截器:

 

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionInvocation;

import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

import com.soumall.admin.utils.JsonUtils;

 

import java.util.HashMap;

import java.util.Map;

 

public class JSONParamReadInterceptor extends AbstractInterceptor {

private static final String jsonParamData = "jsonRequestParameter";

 

@Override

public String intercept(ActionInvocation invocation) throws Exception {

ActionContext ctx = ActionContext.getContext();

Map<String,Object> requestParam = ctx.getParameters();

boolean excuteFlag = false;

if(requestParam!=null){

String[] jsonParamObj =  (String[])requestParam.get(jsonParamData);

if(jsonParamObj!=null && jsonParamObj.length>0){

String jsonParamObjStr = (String)(jsonParamObj[0]);

requestParam = JsonUtils.json2Map(jsonParamObjStr,requestParam,null,null);

if(requestParam!=null && requestParam.size()>0){

excuteFlag = true;

for(Object key : requestParam.keySet()){

System.out.print("  key:  "+key);

System.out.println("    value:  "+requestParam.get(key));

}

}

}

}

if(!excuteFlag ){

System.out.println("No JSON Paramter Or JSON paramter's name have error");

}

return invocation.invoke();

}

 

}

 

 

 

 /**

     * 把JSONObject中的数据填充到Map中.

     *

     * @param <T> Object

     * @param jsonObjectStr json字符串

     * @param entity 需要填充数据的node

     * @param excludes 不需要转换的属性数组

     * @param datePattern 日期转换模式

     * @return T

     * @throws Exception java.lang.InstantiationException,

     *                   java.beans.IntrospectionException,

     *                   java.lang.IllegalAccessException

     */

    public static Map<String,Object> json2Map(String jsonObjectStr,

     Map<String,Object> map, String[] excludes, String datePattern)

        throws Exception {

     JSONObject jsonObject = JSONObject.fromObject(jsonObjectStr);

        // JsonUtils.configJson(excludes, datePattern);

        Set<String> excludeSet = createExcludeSet(excludes);

 

        for (Object object : jsonObject.entrySet()) {

        

            Map.Entry entry = (Map.Entry) object;

            String propertyName = entry.getKey().toString();

 

            if (excludeSet.contains(propertyName)) {

                continue;

            }

 

            String propertyValue = entry.getValue().toString();

            map.put(propertyName, propertyValue);

        }

 

        return map;

    }

2,修改配置文件struts-default.xml

 <!-- JSON parm Driver-->
            <interceptor name="jsonParamDriven" class="com.soumall.admin.interceptor.JSONParamReadInterceptor"/>
           

     <!-- JSON parm Driver-->
                <interceptor-ref name="jsonParamDriven"/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐