我正在开发一个 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();
我查过:
将解决方案从评论迁移到答案:
在 GitHub 存储库上,他们建议 Spring Boot 2 用户使用 0.27.0,而对于 Spring Boot 3,他们建议 >= 0.28.0(今年早些时候发布)。您是否检查过您的 Problem-spring-web 是否仍然与您的 Spring Boot 版本兼容?
– Frank W,2023 年 9 月 24 日 23:15