Struts2 返回 JSON 数据的完整指南
Struts2 返回 JSON 数据的完整指南
在 Web 开发中,前后端分离架构越来越流行,Struts2 作为经典的 Java Web 框架,也提供了灵活的方式来返回 JSON 数据,本文将详细介绍在 Struts2 中如何配置和实现返回 JSON 数据的多种方法。
使用 Struts2 的 JSON 插件
Struts2 官方提供了 JSON 插件(struts2-json-plugin),这是最常用也是最简单的方式返回 JSON 数据。
添加依赖
在项目中添加 JSON 插件的依赖(以 Maven 为例):
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-json-plugin</artifactId>
<version>2.5.30</version>
</dependency>
配置 struts.xml
在 struts.xml 中配置 Action 的返回类型为 json:
<package name="default" extends="json-default">
<action name="userAction" class="com.example.UserAction">
<result type="json" name="success">
<param name="root">user</param>
</result>
</action>
</package>
编写 Action 类
Action 类中定义需要返回的属性,并提供 getter 方法:
public class UserAction extends ActionSupport {
private User user;
public String execute() {
user = new User("张三", 25);
return SUCCESS;
}
public User getUser() {
return user;
}
}
高级配置
JSON 插件还支持更多配置选项:
<result type="json">
<param name="root">user</param>
<param name="excludeProperties">password,secretKey</param> <!-- 排除某些属性 -->
<param name="includeProperties">name,age</param> <!-- 只包含某些属性 -->
<param name="noCache">true</param> <!-- 禁用缓存 -->
<param name="enableGZIP">true</param> <!-- 启用 GZIP 压缩 -->
<param name="contentType">application/json</param> <!-- 设置内容类型 -->
</result>
使用 Struts2 的原生结果类型
如果不使用 JSON 插件,也可以通过 Struts2 的原生结果类型实现 JSON 返回。
配置 struts.xml
<package name="default" extends="struts-default">
<action name="userAction" class="com.example.UserAction">
<result type="stream">
<param name="contentType">application/json</param>
<param name="inputName">jsonInputStream</param>
</result>
</action>
</package>
编写 Action 类
public class UserAction extends ActionSupport {
private InputStream jsonInputStream;
public String execute() {
User user = new User("李四", 30);
String json = new ObjectMapper().writeValueAsString(user);
jsonInputStream = new ByteArrayInputStream(json.getBytes());
return SUCCESS;
}
public InputStream getJsonInputStream() {
return jsonInputStream;
}
}
使用注解方式(Struts2 2.5+)
Struts2 2.5 版本开始支持更简洁的注解方式:
启用注解
在 struts.xml 中添加常量:
<constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="true" /> <constant name="struts.convention.action.includeJars" value=".*jar" /> <constant name="struts.convention.package.locators" value="action" />
使用 @Action 和 @Result 注解
@Namespace("/user")
@ParentPackage("json-default")
public class UserAction {
@Action(value = "getUser",
results = {
@Result(name = "success", type = "json", params = {
"root", "user",
"excludeProperties", "password,secretKey"
})
})
public String getUser() {
user = new User("王五", 28);
return SUCCESS;
}
}
处理复杂对象集合
当需要返回 List 或 Map 等复杂对象时:
返回 List
public class UserAction extends ActionSupport {
private List<User> users;
public String execute() {
users = Arrays.asList(
new User("张三", 25),
new User("李四", 30)
);
return SUCCESS;
}
public List<User> getUsers() {
return users;
}
}
返回 Map
public class UserAction extends ActionSupport {
private Map<String, Object> result;
public String execute() {
result = new HashMap<>();
result.put("success", true);
result.put("message", "操作成功");
result.put("data", new User("赵六", 35));
return SUCCESS;
}
public Map<String, Object> getResult() {
return result;
}
}
常见问题与解决方案
- 404 错误:确保 struts.xml 中配置了
extends="json-default" - 中文乱码:在 struts.xml 中添加
<constant name="struts.i18n.encoding" value="UTF-8" /> - 日期格式问题:自定义日期转换器或使用 @JSON 注解:
@JSON(format = "yyyy-MM-dd") private Date birthday;
Struts2 返回 JSON 数据主要有三种方式:
- 使用 JSON 插件(最简单推荐)
- 使用原生 stream 结果类型(更灵活)
- 使用注解方式(更简洁,适合 Struts2 2.5+)
根据项目需求和个人偏好选择合适的方式,JSON 插件提供了最便捷的解决方案,而原生方式和注解方式则提供了更多的灵活性和控制力,在实际开发中,合理配置和使用这些方法,可以轻松实现前后端数据交互。
抖音足球直播
抖音足球直播
企鹅直播
企鹅直播
足球直播
爱奇艺直播
爱奇艺足球直播
足球直播
足球直播
iqiyi直播
足球直播
足球直播
QQ足球直播
QQ足球直播
足球直播
足球直播
QQ足球直播
QQ足球直播
足球直播
足球直播
快连
快连
快连
快连下载
快连
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
新浪足球直播
新浪足球直播
足球直播
足球直播
有道翻译
有道翻译
有道翻译
有道翻译
wps
wps
wps
wps
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
新浪足球直播
新浪足球直播
足球直播
足球直播



还没有评论,来说两句吧...