You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Struts2与AJAX交互异常:JSON解析错误及响应进入错误函数问题

Struts2 AJAX请求返回JSON解析错误、进入错误函数的解决方案

以下是针对该问题的常见排查方向和解决方法:

1. 确认Struts2 JSON插件已正确引入

Struts2本身不默认支持JSON响应,必须依赖struts2-json-plugin组件:

  • Maven项目需在pom.xml中添加依赖:
    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-json-plugin</artifactId>
        <version>对应你的Struts2版本</version>
    </dependency>
    
  • 非Maven项目需将对应版本的struts2-json-plugin.jar放入WEB-INF/lib目录。

2. 配置Action的Result类型为JSON

在struts.xml中,确保目标Action的返回结果类型为json,且避免多余的视图输出:

<action name="propertyTesting" class="com.yourpackage.PropertyTesting">
    <result type="json">
        <!-- 可选:指定序列化的根对象,减少冗余数据 -->
        <param name="root">responseData</param>
    </result>
</action>

3. 确保响应为纯JSON格式

任何非JSON内容(如HTML标签、空格、换行、错误日志)都会导致解析失败:

  • 检查对应的JSP页面,删除所有多余的HTML代码、注释或空白行(即使是JSP开头的空行也可能输出到响应流);
  • 禁止在Action中通过ServletActionContext.getResponse().getWriter()输出额外内容,也不要将System.out的输出混入响应流。

4. 修正AJAX请求的参数配置

确保AJAX请求明确指定期望JSON响应,并配置正确的内容类型:

$.ajax({
    url: "propertyTesting.action",
    type: "POST",
    dataType: "json", // 关键:告知客户端期望JSON格式
    contentType: "application/x-www-form-urlencoded; charset=utf-8", // 表单提交场景
    data: { paramName: "paramValue" },
    success: function(res) {
        console.log("成功响应:", res);
    },
    error: function(xhr) {
        // 临时打印响应内容,快速定位问题
        console.log("实际返回内容:", xhr.responseText);
    }
});

5. 检查Action类的序列化规则

JSON插件通过Getter方法序列化属性,需满足以下要求:

  • 要返回的属性必须提供对应的Getter方法;
  • 无需序列化的属性可通过@JSON(serialize=false)注解排除,避免序列化错误;
  • 示例Action代码:
    public class PropertyTesting extends ActionSupport {
        private String resultMsg;
        // 必须提供Getter方法
        public String getResultMsg() {
            return resultMsg;
        }
        public void setResultMsg(String resultMsg) {
            this.resultMsg = resultMsg;
        }
        public String execute() {
            resultMsg = "请求处理成功";
            return SUCCESS;
        }
    }
    

6. 统一响应编码

避免因编码问题导致JSON解析失败,在struts.xml中配置全局编码:

<constant name="struts.i18n.encoding" value="UTF-8"/>
<constant name="struts.json.encoding" value="UTF-8"/>

快速定位技巧

先在AJAX的error函数中打印xhr.responseText,查看实际返回的内容:

  • 如果返回的是Struts2错误页面,说明Action配置或路径有误;
  • 如果返回的是带HTML前缀的JSON,说明存在多余的视图输出;
  • 如果返回的是空白或乱码,优先排查编码问题。

内容的提问来源于stack exchange,提问作者s.surya Prakash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 14:10:27