javascript方法: JSON.stringify(jsonObj), 将JSON对象转为字符串
项目中需要将复杂的对象从前端传到后端, 通过struts2的拦截器, 直接转换注入到action的属性中
比如 private List<Bean> test;
当然可以将data写成:
{ "test[0].note":"note a", "test[0].username":"username a",
"test[1].note":"note b", "test[1].username":"username b"
}
直接将obj做为data传给$.ajax不行, struts2没配置json拦截器也不行
javascript:
var jsonObj = { "test": [{"note":"note a", "username":"username a"}, {"note":"note b", "username":"username b"} ] }; var str = JSON.stringify(jsonObj); //console.log("result: "+str); $.ajax({ url: "input.action", contentType: 'application/json', data: str, type: "post", datatype: "json", success: function(data){ console.log(data); } });
bean:
public class Bean{
private String note;
private String username;
//getter and setter
}
action:
public class TestAction extends BaseAction{
private List<Bean> test;
public List<Bean> getTest() {
return test;
}
public void setTest(List<Bean> test) {
this.test = test;
}
public String input(){
System.out.println(test);
for(Bean bean: test){
System.out.println(bean.getNote());
}
return SUCCESS;
}
}
struts2:
<package name="test" namespace="/test" extends="json-default">
<interceptors>
<interceptor-stack name="def">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="json"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="def"></default-interceptor-ref>
<action name="input" class="testAction" method="input">
<result type="json"></result>
</action>
</package>
spring配置省略