struts2 反序列化json字符串的问题使用ajax请求到struts2一个json字符串 提供对应的setter方法使struts2框架自动注入到对性的属性中
比如:
$.post("test/display.action", {"name":"2.html->name的值", "value":"2.html->value的值", "list":["11", "22", "33"]}, "json");
普通的String类型或者list类型可以正常注入
如果给action属性中有一个map类型注入
$.post("test/display.action", {"name":"2.html->name的值", "value":"2.html->value的值", "list":["11", "22", "33"], "maps":{"key1":"value1", "key2":"value2"}}, "json"); 
提示 Cannot create type interface java.util.Map from value [object Object]请问是我写的json字符串错误还是别的问题。通过struts2框架将action属性序列化以后的json字符串为:{"JSON":"success","maps":{"key1":"key1的值","key2":"key2的值"},"list":["list1","list2","list3"],"name":"name的值","value":"value的值"}action 类中对应的属性:
private String name;
private String value;
private List list;
private Map maps;setter 
... ... 
getter
....

解决方案 »

  1.   

       谁给个解决的办法? Map Map Map Map Map Map
      

  2.   

    顺便谁给推荐本struts2的书。 越详细越好
      

  3.   

    <a href="test/display.action?maps.key1=key1的值&maps.key2=key2的值">Map Test</a>
      

  4.   

    俺这个方法可以直接填到对象中····
    @SuppressWarnings("unchecked")
    public static Object formatObject(HttpServletRequest request,
    String className) throws Exception {
    Object object = Class.forName(className).newInstance();
    Class classType = object.getClass();
    Field[] fields = classType.getDeclaredFields();
    for (Field field : fields) {
    String fieldName = field.getName();
    Object value = request.getParameter(className);
    String methodName = "set" + fieldName.substring(0, 1).toUpperCase()
    + fieldName.substring(1);
    Method setterMethod = classType.getMethod(methodName,
    new Class[] { field.getType() });
    if (value != null && !"".equals(value) && "" != value
    && setterMethod != null) {
    if (field.getType().toString().equals("class java.lang.Double")) {
    setterMethod.invoke(object, new Object[] { Double
    .parseDouble(value.toString()) });
    } else if (field.getType().toString().equals(
    "class java.lang.Integer")) {
    setterMethod.invoke(object, new Object[] { Integer
    .parseInt(value.toString()) });
    } else if (field.getType().toString().equals(
    "class java.lang.Long")) {
    setterMethod.invoke(object, new Object[] { Long
    .parseLong(value.toString()) });
    } else if (field.getType().toString().equals(
    "class java.lang.Float")) {
    setterMethod.invoke(object, new Object[] { Float
    .parseFloat(value.toString()) });
    } else {
    setterMethod.invoke(object, new Object[] { value });
    }
    } } return object;
    }
    var params = "account=" + account.val() + "&password="
    + password.val() + "&randCode=" + randCode.val();
    $.ajax( {
    url : 'login!login.action',
    type : 'post',
    dataType : 'json',
    data : params,
    success : main
    });
      

  5.   

    使用你那种方式也行,反正最后都是要用url传的,只不过分get和post区别罢了
      

  6.   

    $.post("test/display.action", {"name":"2.html->name的值", "value":"2.html->value的值", "list":["11", "22", "33"], "maps.key1":"value1", "maps.key2":"value2"}}, "json");
    这样写可以直接给Map 注入值了