欧易钱包
欧易交易所
欧易app
欧易官网
欧易下载
币安下载
币安app
币安官网下载
币安钱包
币安注册
快连
快连
快连
快连下载
快连电脑版
快连下载
快连下载
快连电脑版
快连电脑版
欧易OKX下载
欧易OKX下载
欧易交易所
欧易交易所
欧易下载
欧易下载
欧易官网下载
欧易官网下载
欧易APP下载
欧易APP下载
Struts2中使用JSON的完整指南
在Java Web开发中,Struts2框架与JSON的结合使用非常常见,特别是在前后端分离架构中,本文将详细介绍在Struts2中如何配置和使用JSON进行数据交互。
准备工作
添加依赖
需要在项目中添加Struts2的JSON插件依赖,对于Maven项目,在pom.xml中添加:
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-json-plugin</artifactId>
<version>2.5.30</version> <!-- 使用与Struts2版本匹配的插件版本 -->
</dependency>
配置struts.xml
在struts.xml中配置JSON结果类型:
<package name="default" namespace="/" extends="json-default">
<action name="userAction" class="com.example.UserAction">
<result type="json"></result>
</action>
</package>
注意:这里继承的是json-default包,而不是默认的struts-default。
Action配置
基本JSON返回
创建一个Action类,提供getter方法供JSON序列化:
public class UserAction {
private String username;
private int age;
private List<String> hobbies;
// getter和setter方法
public String execute() {
// 业务逻辑处理
return "success";
}
}
控制JSON输出
可以通过注解或配置来控制JSON输出:
@Namespace("/api")
@ParentPackage("json-default")
public class UserAction {
private String username;
private int age;
private List<String> hobbies;
@JSON(name = "user_name") // 指定JSON中的key名称
public String getUsername() {
return username;
}
@JSON(serialize = false) // 不序列化该字段
public int getAge() {
return age;
}
// 其他getter和setter
public String execute() {
return "success";
}
}
处理复杂对象
返回嵌套对象
public class UserAction {
private User user;
private List<Role> roles;
// getter和setter
public String getUserDetail() {
user = new User("张三", 25);
roles = Arrays.asList(new Role("admin"), new Role("user"));
return "success";
}
}
处理日期格式
使用@JSON(format = "yyyy-MM-dd")注解:
public class User {
private String name;
private Date birthday;
@JSON(format = "yyyy-MM-dd HH:mm:ss")
public Date getBirthday() {
return birthday;
}
}
接收JSON请求
配置允许接收JSON
在struts.xml中配置:
<action name="saveUser" class="com.example.UserAction" method="save">
<interceptor-ref name="json">
<param name="enableSMD">true</param>
<param name="ignoreSMDParameter">false</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<result type="json"></result>
</action>
解析JSON请求
public class UserAction {
private User user; // 需要有setter方法
public String save() {
// 处理接收到的user对象
System.out.println("Received user: " + user.getName());
return "success";
}
public void setUser(User user) {
this.user = user;
}
}
前端发送JSON请求示例:
$.ajax({
url: "saveUser",
type: "POST",
contentType: "application/json",
data: JSON.stringify({
name: "李四",
age: 30
}),
success: function(response) {
console.log(response);
}
});
常见问题与解决方案
循环引用问题
当对象之间存在循环引用时,JSON序列化会出错,解决方案:
@JSON(serialize = false)
public User getFriend() {
return friend;
}
或使用@JSON注解的serialize属性控制。
自定义序列化
实现JSONString接口或使用@JSON注解的serialize属性。
处理集合类型
Struts2 JSON插件默认支持List、Set等集合类型的序列化。
最佳实践
- 始终对返回的JSON数据进行验证
- 使用DTO(数据传输对象)而不是直接暴露实体类
- 考虑安全性,避免序列化敏感信息
- 合理使用
@JSON注解控制输出格式 - 对于复杂场景,可以考虑使用Jackson或Gson等专业JSON库
Struts2通过JSON插件提供了强大的JSON支持,使得前后端数据交互变得简单高效,通过合理的配置和编码实践,可以轻松实现复杂的数据序列化和反序列化需求,随着前后端分离架构的普及,Struts2中的JSON使用技巧变得越来越重要。



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