在 Spring Boot 应用程序中将 Problem-spring-web 依赖项从 v0.27.0 升级到 v0.29.1 时出现 NoClassDefFoundError

问题描述 投票:0回答:1

我正在开发一个 Spring Boot 项目,其中使用 problem-spring-web 依赖项进行异常处理。

这是我的控制器建议

package com.example.demo.error;

//... other imports ...

@ControllerAdvice
public class SpringBootProblemHandling implements ProblemHandling {

    // ... class content ...

    @ExceptionHandler
    public ResponseEntity<Problem> handleGenericException(
          Exception exception,
          NativeWebRequest request) {
        
        //... method implementation ...
    }
}

我也有相应的测试类:

package com.example.demo.error;

//... other imports ...

@ActiveProfiles("test")
public class SpringBootProblemHandlingTest {

    private SpringBootProblemHandling problemHandling = new SpringBootProblemHandling();

    private ServletWebRequest request = new ServletWebRequest(new MockHttpServletRequest());

    @Test
    public void handleGenericException() {
        ResponseEntity<Problem> problemRE = problemHandling.handleGenericException(new Exception(), request);

        assertEquals(INTERNAL_SERVER_ERROR, problemRE.getStatusCode());
    }
}

当使用依赖项org.zalando:problem-spring-web:0.27.0时,测试运行没有问题,但是当我将problem-spring-web版本更改为0.29.1时,我收到以下异常:

java.lang.NoClassDefFoundError: org/springframework/http/HttpStatusCode

这个错误发生在测试类中创建SpringBootProblemHandling对象的行:

private SpringBootProblemHandling problemHandling = new SpringBootProblemHandling();

我查过:

  1. 如果两个版本之间的发行说明中有任何重大更改,但找不到与此问题相关的任何信息。
  2. 尝试不直接使用 new 关键字实例化 SpringBootProblemHandling,而是使用自动连线,但这也没有帮助
java spring-boot spring-mvc spring-boot-test
1个回答
0
投票

将解决方案从评论迁移到答案:

在 GitHub 存储库上,他们建议 Spring Boot 2 用户使用 0.27.0,而对于 Spring Boot 3,他们建议 >= 0.28.0(今年早些时候发布)。您是否检查过您的 Problem-spring-web 是否仍然与您的 Spring Boot 版本兼容?

Frank W2023 年 9 月 24 日 23:15

© www.soinside.com 2019 - 2024. All rights reserved.