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

Struts从2.3.7升级到2.3.33后出现JSONWriter方法缺失错误

解决Struts2升级到2.3.33后的JSON NoSuchMethodError问题

我之前处理过类似的Struts2升级问题,这个java.lang.NoSuchMethodError: org.apache.struts2.json.JSONWriter.setDateFormatter(Ljava/lang/String;)V本质是类依赖版本冲突导致的——你的项目classpath中混入了旧版本的JSONWriter类(来自之前的Struts2 2.3.7),而新版本的struts2-json-plugin-2.3.33尝试调用该类中已变更或不存在的方法。下面是一步步的解决方法:

1. 统一所有Struts2相关依赖的版本

首先确保你的pom.xml中所有Struts2核心组件(包括JSON插件)都明确指定为2.3.33版本,绝对不能混合旧版本:

<!-- Struts2核心依赖 -->
<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.3.33</version>
</dependency>
<!-- JSON处理插件 -->
<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-json-plugin</artifactId>
    <version>2.3.33</version>
</dependency>
<!-- XWork核心依赖 -->
<dependency>
    <groupId>org.apache.struts.xwork</groupId>
    <artifactId>xwork-core</artifactId>
    <version>2.3.33</version>
</dependency>

2. 排查并排除依赖冲突

很多时候第三方依赖会偷偷引入旧版本的Struts2组件,你可以用Maven的依赖树命令找出这些冲突:

mvn dependency:tree

在输出结果中查找包含struts2-json-plugin、xwork-core的条目,如果发现有依赖引入了2.3.7或其他旧版本,就在对应的依赖中添加排除规则,把旧版本的组件踢出去:

<dependency>
    <groupId>第三方依赖的groupId</groupId>
    <artifactId>第三方依赖的artifactId</artifactId>
    <version>第三方依赖的版本号</version>
    <exclusions>
        <!-- 排除旧版本的Struts2 JSON插件 -->
        <exclusion>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-json-plugin</artifactId>
        </exclusion>
        <!-- 排除旧版本的XWork核心 -->
        <exclusion>
            <groupId>org.apache.struts.xwork</groupId>
            <artifactId>xwork-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

3. 清理缓存并重新构建

旧版本的jar包可能残留在Maven本地仓库或项目的target目录中,执行以下命令强制清理并重新构建项目:

# 清理项目构建目录
mvn clean
# 强制更新依赖并重新安装
mvn install -U

4. 检查最终打包的依赖

最后确认项目打包后的WEB-INF/lib目录中,所有Struts2相关jar都是2.3.33版本,没有遗留2.3.7版本的文件。如果是IDE开发,也可以清理IDE的缓存(比如IntelliJ的File -> Invalidate Caches...,Eclipse的Project -> Clean...),避免IDE加载旧的class文件。

额外说明

Struts2 2.3.x系列后续版本对JSON处理的配置没有重大变更,你的Action注解和Ajax代码完全不需要修改,只要依赖版本统一就能正常运行。

内容的提问来源于stack exchange,提问作者assuna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:10:06