我从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配置文件)
所以
但是我可以使用
从命令行执行相同的操作mvn spring-boot:run
那么我没有错误吗?!按照另一篇文章的建议,我将IntelliJ升级到了最新版本,但没有帮助
答案 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属性中