springboot升级后出现“ NoSuchMethodError getHttpServletMapping”

时间:2020-02-03 09:34:38

标签: java spring spring-boot maven intellij-idea

我从springboot 2.1.3升级到了2.2.0。到目前为止,一切正常,但是我注意到当我发出一个返回400的rest请求时,我得到的错误不是得到json响应:

[Tomcat].[localhost]           : Exception Processing ErrorPage[errorCode=0, location=/error]
java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getHttpServletMapping()Ljavax/servlet/http/HttpServletMapping;

有趣的是,当我使用嵌入式tomcat从Intellij启动应用程序时,我只能。 (使用“ spring-boot:run”创建一个mvn配置文件)

所以

  • 使用独立的tomcat,它在任何地方都可以正常工作
  • 使用嵌入式tomcat,并且只有当我从Intellij开始时,才会出现此错误。

但是我可以使用

从命令行执行相同的操作

mvn spring-boot:run

那么我没有错误吗?!按照另一篇文章的建议,我将IntelliJ升级到了最新版本,但没有帮助

3 个答案:

答案 0 :(得分:0)

我解决了这个问题。

更改属性tomcat.version没有帮助,因此我省略了它,并将其添加到 child pom(技巧是在父pom中不起作用)。另请注意,该版本是2.2.4而不是2.2.0

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <version>2.2.4.RELEASE</version>
    </dependency>

答案 1 :(得分:0)

只是想提另一个“解决方案”,因为我刚刚在升级到 Spring Boot 2.4.0 后遇到了同样的问题

我的应用在 Java 11、Spring Boot 2.4.0 和 JakartaEE Api 8.0.0 上运行

很长一段时间我都忽略了 Jakarta 版本,因为我没有发现任何关于我的问题和网络依赖的内容。

但是在将 JakartaEE 升级到 9.0.0 之后,一切正常。

<dependency>
    <groupId>jakarta.platform</groupId>
    <artifactId>jakarta.jakartaee-api</artifactId>
    <version>9.0.0</version>
</dependency>

这就是我的问题的解决方案:) 也许它可以帮助其他人。

答案 2 :(得分:-1)

我认为您必须升级嵌入的ur tomcat版本,版本不匹配。 Spring Boot 2.1.X使用具有Servlet API v4的Tomcat 9。 但是Spring Boot Web 2.1.X仍然合并了Servlet API v3.1。 要么 更改tomcat版本属性

<properties> <tomcat.version>8.5.37</tomcat.version> <properties>

NB:tomcat.version属性是pom.xml中的普通Maven属性。只需将tomcat.version添加到您现有的Maven属性中