在上一篇搭建了struts2开发环境,之前开发一些小项目都是直接使用的servlet,在servlet中返回json数据很容易:在response对象中打开流直接写入json数据就好了。今天学习struts2时也想在action中返回json数据,但是action中并不能直接像servlet那样返回json数据。在这里记录下今天的收获吧!
在action中返回json数据有两种方法:
1.在action中得到response对象,然后就和在servlet中返回json数据是相同的。
2.struts2对json的扩展,下面主要介绍这种方法.
导入需要的jar包
要使用struts2对json的扩展,我们需要导入struts2-json-plugin-2.1.8.1.jar和xwork-core-2.1.6.jar.使用这两个版本的包完美运行,其他版本可能会有差异导致失败!!!
编写action
struts2把json看成时map对象(键值对,json本身也就是这样....),所以我们在写action时只要有一个map对象就可以了,struts2会对把这个map对象自动的返回给请求页面(需要特定的配置).例如:
public class TestAction extends ActionSupport{
/**
*
*/
private static final long serialVersionUID = 1L;
private Map<String,Object> jsonData;
public String getJsonList(){
jsonData = new HashMap<String,Object>();
jsonData.put("one", "one's apple");
return Action.SUCCESS;
}
public Map<String,Object> getJsonData() {
return jsonData;
}
public void setJsonData(Map<String,Object> jsonData) {
this.jsonData = jsonData;
}
}
配置struts.xml
返回json数据的action必须extends json-default包,而且result type属性必须为json
<package name="textJson" namespace="/textJson" extends="json-default">
<action name="getJsonList" class="cui.schat.action.TestAction" method="getJsonList">
<result type="json">
<param name="root">jsonData</param> <!-- 这里的jsonData对应action里要返回的map对象 -->
</result>
</action>
</package>