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
....
比如:
$.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
....
@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
});
这样写可以直接给Map 注入值了