Spring Boot WebTestClient抛出连接拒绝:没有进一步的信息:/127.0.0.1:80

i1icjdpr  于 2024-01-06  发布在  Spring
关注(0)|答案(1)|浏览(218)

我们在Sping Boot 3.2.0中通过@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)WebTestClient进行的集成测试失败,但有以下例外

  1. org.springframework.web.reactive.function.client.WebClientRequestException:
  2. Connection refused: no further information: /127.0.0.1:80

字符串
测试如下所示:

  1. @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
  2. public class TestClass {
  3. @Autowired
  4. protected WebTestClient webTestClient;
  5. @Test
  6. void testShiftLog() {
  7. // Given
  8. URI uri = UriComponentsBuilder.fromUri(URI.create(SHIFTLOG_ENDPOINT_URL))
  9. .build().toUri();
  10. ShiftLogItem body = generateSchichtbuchItem();
  11. // When, Then
  12. webTestClient.post().uri(uri)
  13. .body(Mono.just(body), ShiftLogItem.class)
  14. .header("Content-Type", "application/json")
  15. .exchange() // HERE THE EXCEPTION IS THROWN.
  16. .expectStatus().isCreated()
  17. .expectBody(Void.class);
  18. }
  19. }


当我调试代码时,我可以看到WebTestClient对象配置正确,即随机端口。尽管如此,例外引用 localhost:80,这完全是奇怪的。有什么想法吗?

o8x7eapl

o8x7eapl1#

现在问题已经解决了。这里的问题是.uri(URI uri)部分。如果你像这里一样应用了一个基URI,那么.uri(URI uri)将不会应用于基URI,而是取而代之。
因此,为了修复它,你必须使用重载的.uri(String uri)方法。你可以通过URI的toString()方法轻松完成:

  1. // When, Then
  2. webTestClient.post().uri(uri.toString())...

字符串
另请参阅Spring Java文档:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/test/web/reactive/server/WebTestClient.UriSpec.html#uri(java.net.URI)

相关问题