structs2返回json

structs2返回本身支持返回json,只需要配置即可,我们也可以自己把json串写入servlet输出流中。

1.structs2本身对json的支持
在action中对需要返回的值进行设置,实体、java自带类型都可以。
如:

1
2
3
4
5
6
7
8
9
private User user;
private result result;

/* setter and getter */
public String json() {
user.setUserName("iris");
result = "success";
return SUCCESS;
}

在配置文件中配置result的type为json

1
<result-types>
    <result-type name="json" class="org.apache.struts2.json.JSONResult"/>
</result-types>

<action name="hello_*" class="action.FirstAction" method="{1}">
    <result name="success" type="json"></result>
</action>

注意result-types那段一定要加上,不加那个的就必须让action所在的package继承json-default
2.把json数据写入servlet输出流中
在action中讲json数据直接写入servlet输出流中,action中的方法返回void
如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public void newjsontest() {
HttpServletResponse response = ServletActionContext.getResponse();
PrintWriter out = null;
try {
out = response.getWriter();
User user = new User();
user.setUsername("iris");
user.setPassword("iris");
JSONObject jsonObject = JSONObject.fromObject(user);
out.print(jsonObject.toString());
out.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(out != null) {
try {
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

这里用到了net.sf.json.JSONObject这个包,将实体直接转换成json,也可以不用这个包,直接手动拼json串,然后out.write(jsonStr)