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

Spring Boot应用服务器正常运行,本地启动报错:getFirst()方法找不到

解决本地Spring Boot启动时方法找不到的问题

核心问题分析

你的错误分两类:

  • List的addFirst方法不存在:Java标准List接口从未提供这个方法,它是Deque(如LinkedList)的专属方法
  • List的getFirst方法找不到:这个方法是Java 21才新增到List接口的默认方法,如果编译环境版本低于21就会报错

虽然你说本地和服务器都是Java21,但大概率是本地编译/运行环境的实际版本不匹配,或者代码写法依赖了非标准List方法导致的问题。

具体修复步骤

1. 强制统一编译版本

在pom.xml中添加maven-compiler-plugin配置,确保编译时严格使用Java21,避免IDE或Maven默认配置的版本偏差:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.12.1</version>
            <configuration>
                <release>21</release>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

同时检查IDE的编译设置:

  • IntelliJ:File > Project Structure,将Project SDK和Language Level都设为21
  • Eclipse:Window > Preferences > Java > Compiler,把Compiler compliance level改成21

2. 修复List方法调用问题

针对addFirst错误

把JSONWebMvcConfigurer.java里的:

converters.addFirst(new FastJsonHttpMessageConverter());

替换为所有List实现都支持的写法:

converters.add(0, new FastJsonHttpMessageConverter());

效果完全一致,都是在列表头部插入元素。

针对getFirst错误

如果要兼容Java21以下版本,或者避免依赖Java21的新特性,把Controller.java和EntityUtils.java里的:

generalAnswers.getFirst();
questionList.getFirst();

替换为:

// 处理空列表的情况,避免索引越界
generalAnswers.isEmpty() ? null : generalAnswers.get(0);
questionList.isEmpty() ? null : questionList.get(0);

如果坚持用Java21的新方法,确保编译和运行环境都是21即可。

3. 同步依赖版本

执行以下命令清理本地Maven仓库,重新拉取和服务器一致的依赖,避免依赖损坏或版本不一致:

mvn clean install -U

4. 确认运行环境版本

本地启动jar前,执行以下命令确认当前使用的Java版本:

java -version

确保输出的版本是21,如果不是,检查系统环境变量JAVA_HOME和PATH是否指向正确的Java21安装目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:06:09