Struts2 整合 JSON 極為簡單,但配置細節容易遺忘。本文記錄核心步驟與關鍵點,作為快速參考手冊。
必須引入 struts2-json-plugin,版本與 Struts2 核心版本對應(示例為 2.3.24):
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-json-plugin</artifactId>
<version>2.3.24</version>
</dependency>
package com.mz.action;
import com.mz.entity.User;
import com.opensymphony.xwork2.ActionSupport;
public class JsonAction extends ActionSupport {
private User user;
public String execute() {
user = new User();
user.setId(123);
user.setUsername("Irasel");
return SUCCESS;
}
public User getUser() { return user; }
public void setUser(User user) { this.user = user; }
}
User 實體類僅包含 id、username 及對應 Getter/Setter。
<package name="resultJson" namespace="/" extends="json-default">
<action name="resultJson" class="com.mz.action.JsonAction">
<result name="success" type="json">
<param name="root">user</param>
</result>
</action>
</package>
root 參數值必須為 OGNL 表達式,對應 Action 中的屬性名(此處為 "user"),不可更改參數名 "root"!
$.ajax({
type: "GET",
contentType: "application/json",
url: "<%=request.getContextPath()%>/resultJson",
dataType: "json",
success: function(data) {
console.log("返回 JSON:", data);
// 輸出:{id: 123, username: "Irasel"}
},
error: function() { alert("請求失敗"); }
});
啟動 Tomcat,訪問 https://localhost:8080/你的項目/resultJson,瀏覽器將直接顯示 JSON 字符串:

NoClassDefFoundError 或結果類型找不到。root 參數,導致返回空對象 {}。extends="json-default",否則 type="json" 不識別。method="GET"。若需接收 JSON 請求體,Action 方法添加 @RequestBody 註解(需 Struts2 REST 插件或 Spring MVC 整合),或在攔截器中解析 ServletInputStream。純 Struts2 環境下,表單提交仍以 application/x-www-form-urlencoded 為主。