一、前言
工作中经常遇到使用 Struts2 返回 JSON 格式数据的情况,这里做下记录三种返回json格式数据的方法:
- 使用response方式,直接将json数据写到流里。
- 使用json-default依赖(不推荐,需要额外引入依赖)。
- 使用result中 stream 类型返回数据。
二、详细介绍
1、使用response的方式
public String putJson(Object obj){
PrintWriter pw = null;
try{
response.setContentType("application/json;charset=UTF-8");
pw = response.getWriter();
response.setDateHeader("Expires",0);
String jsonString = JSON.toJSONString(obj);
pw.write(jsonString);
pw.flush();
pw.close();
return CommonConstant.RESULT_SUCCESS;
}catch (Exception e){
logger.error("转换成JSON写入页面异常",e);
}
return CommonConstant.RESULT_FAIL;
}
2、使用json-default 的方式
使用这种方式的话需要添加json依赖
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-json-plugin</artifactId>
<version>2.3.16.3</version>
</dependency>
包要继承 json-default ,类型使用 json,result 表示需要返回的json数据
<package name="loginPackage" namespace="/" extends="json-default,struts-default">
<action name="login" class="loginAction" method="loginAction">
<result name="success" type="json">
<param name="root">result</param>
</result>
</action>
</package>
3、使用 stream 类型
- 这是 xml 配置,使用 type=“stream”
<action name="checkLogin" class="loginAction" method="checkLoginAction">
<result name="success" type="stream">
<param name="contentType">text/html</param>
<param name="inputName">stream</param>
</result>
</action>
- 这是 Action
public String checkLoginAction()throws Exception{
User user = new User();
user.setNickname("落叶");
user.setUsername("admin");
user.setPassword("123456");
String result = JSON.toJSONString(user);
stream = new ByteArrayInputStream(result.getBytes());
return "success";
}
- 这是返回结果