首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在使用@WebFluxTest测试的控制器中使用WebClient会抛出java.lang.IllegalArgumentException: URI不是绝对的

。这个错误通常是由于在使用WebClient时传递了一个相对路径的URI导致的。

WebClient是Spring WebFlux框架提供的用于进行非阻塞的HTTP通信的客户端工具。在测试控制器时,可以使用@WebFluxTest注解来模拟WebFlux环境,并自动配置相关的Bean。

当在测试控制器中使用WebClient时,需要注意以下几点:

  1. 确保传递给WebClient的URI是绝对路径。相对路径的URI会导致IllegalArgumentException异常。可以使用UriComponentsBuilder来构建绝对路径的URI,或者直接使用完整的URL。
  2. 在测试控制器中,可以使用@AutoConfigureWebTestClient注解来自动配置WebTestClient,用于发送HTTP请求并接收响应。WebTestClient是Spring WebFlux提供的用于测试WebFlux应用程序的工具。
  3. 在测试控制器中,可以使用@MockBean注解来模拟依赖的服务或组件。这样可以在测试中控制依赖的行为,以便更好地进行单元测试。

以下是一个示例代码,展示了如何在使用@WebFluxTest测试的控制器中正确使用WebClient:

代码语言:txt
复制
@RunWith(SpringRunner.class)
@WebFluxTest(MyController.class)
public class MyControllerTest {

    @Autowired
    private WebTestClient webTestClient;

    @MockBean
    private MyService myService;

    @Test
    public void testGet() {
        // 模拟myService的行为
        when(myService.getData()).thenReturn(Mono.just("Hello"));

        // 发送GET请求并验证响应
        webTestClient.get().uri("/api/data")
                .exchange()
                .expectStatus().isOk()
                .expectBody(String.class).isEqualTo("Hello");
    }
}

在上述示例中,我们使用@WebFluxTest注解来测试MyController,并使用@MockBean注解来模拟MyService。在测试方法testGet中,我们发送了一个GET请求,并验证了响应的状态码和内容。

需要注意的是,在使用WebClient时,确保传递的URI是绝对路径,避免抛出IllegalArgumentException异常。

相关搜索:使用WebFlux的Spring boot在测试中总是抛出403状态使用Java URI.create在HDFS中写入带空格的文件名会导致使用IllegalArgumentException失败在使用@ testing - ForwardRef /react测试使用react-spring设置动画的组件时,会因为更新react而抛出警告谷歌操作中的MediaObject在使用测试模拟器时抛出错误使用所在页面的控制器而不是在ActionLink中设置的控制器进行NavBar如何使用Jest在typescript中模拟服务对测试控制器的响应如何使用JUnit5在Micronaut中模拟控制器测试中的服务类?在group by之后使用R中的Levene测试时出错[错误:不是数值变量]在vs test explorer中运行XUnit测试时,CSLAs WCF的使用会导致模拟异常。使用react jest测试在requireJS中创建的组件,抛出错误:未定义ReferenceError: define无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com如何解决“定义并抛出专用异常,而不是使用泛型异常。”在我的代码中在需要存储反应式代码输出的测试中,如何使用StepVerifier而不是block()?如何在视图中使用通过ajax接收的响应,而不是在控制器中编写HTML在使用moment-timezone的Angular 2服务中测试方法时,获取tz不是函数错误如何仅使用回调(无承诺、异步/等待)在异步代码(从数据库读取)中测试Mocha中的“抛出错误”?测试在TestLab中失败,但是当从gradle传递runner的参数并在我的androidTest中使用它们时,会传入本地如何在Swift 5中点击Tableview行时使用Xib (而不是StoryBoards)在SideMenu控制器中设置UINavigationController以推送新的ViewController在Django测试中,为什么我需要使用<Model>.objects.get()而不是<Model>.objects.create()返回的内容?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

一文搞懂Spring5 Mock测试

当你使用这个枚举值的时候内嵌的服务不会启动;如果你的类路径中没有Web应用环境,这种模式会创建一个非Web的ApplicationContext(应用上下文), 它可以和@AutoConfigureMockMvc...然而如果你使用RANDOM_PORT或者DEFINED_PORT开启了真实的servlet web 环境,这种情况下http客户端和服务器运行在一个独立的线程中,这时候任何在test方法中执行完的事务在测试方法执行完之后都不会回滚...MockMvc测试控制器的,在测试类上加上这个注解之后就可以在测试方法中通过@Autowired注解注入MockMvc实力bean了,官网上的demo用法如下: import org.junit.jupiter.api.Test...注解 这个注解一般用于测试WebFlux模式下(全部非阻塞IO、支持 Reactive Streams)的控制器,通常@WebFluxTest注解用于测试单个控制器中的请求并与@MockBean联合使用...相信看完本文的讲解后,对于在SpringBoot项目中使用Mock测试完成Junit5单元测试已经毫无压力了。

2.8K20
  • 艿艿连肝了几个周末,写了一篇贼长的 Spring 响应式 Web 框架 WebFlux!市面第二完整~

    测试接口 示例代码对应仓库:lab-27-webflux-01 。 在开发完接口,我们会进行接口的自测。...也就是说,本小节,我们会继续在 lab-27-webflux-01 示例的基础上修改。 MockMvc 提供了集成测试和单元测试的能力,我们分成 「3.1 集成测试」 和 「3.2 单元测试」 来看。...在后续的测试中,我们会看到都是通过 webClient 调用后端 API 接口。而每一次调用后端 API 接口,都会执行真正的后端逻辑。...执行成功,单元测试通过。 可能胖友对单元测试不是很了解,这里在额外推荐一本书 《有效的单元测试》 。很薄,周末抽几个小时就能读完。...5.4 UserController 在 UserController 类中,我们添加两个 API 接口,抛出异常,方便我们测试全局异常处理的效果。

    6K14

    微服务架构之Spring Boot(七十九)

    ,用于在控制器中的每个请求处理程序上启用计时。...,为资源中的每个请求处理程序启用计时。...在启用单个端点的方法上。如果您在类上拥有它,则不需要这样做,但可以用于进一步自定义此特定端点的计时器。 在使用 longTask = true 的方法上为该方法启用长任务计时器。...状态代码(例如, 200 或 500 ) uri 如果可能,在变量替换之前请求URI模板(例如, /api/person/{id} ) 要自定义标记,请提供实现 JerseyTagsProvider 的...为此,您必须注入一个自动配置的构建器并使用它来创建实例: RestTemplateBuilder RestTemplate WebClient.Builder WebClient 也可以手动应用负责此仪器的定制器

    78910

    精讲响应式WebClient第6篇-请求失败自动重试机制

    一、请求异常重试 下面的代码是请求"http://jsonplaceholder.typicode.com" 网站的服务,该网站是一个免费提供HTTP请求测试的服务端网站,我们可以用它测试WebClient...也可以使用retry()无参方法,不设置次数,可以无限重试。这样显然不好,我们一般不用。 下面是doOnError中打印的控制台输出内容,一共打印了4次。...如果这是在生产环境下,可能你的服务端因为资源紧张造成请求响应超时等异常,这种重试机制无疑会让本就不堪重负的服务端雪上加霜。...在实际的开发中,可以请求重试的场景应该是:网络异常、请求超时异常、服务端突然面临高并发导致的临时处理能力不足导致的超时等这种由于外部原因导致的异常场景。...所以说Webclient已经在源码中,将retryBackoff()标记为废弃,建议使用retryWhen()代替它。retryWhen()可以指定针对某些异常进行重试,其他异常不做重试。

    2.7K31

    Task及Mvc的异步控制器 使用探索

    结果就出问题了,数据库连接池用一段时间就满了,排除了各种原因,最后开始怀疑是不是Task有什么不为人知的隐患。 由于对Task的使用只是停留在开一个线程去执行一个不需要返回结果的任务这种阶段。...因为在调用.Result时,UI线程会阻塞, 而我们给GetResult的任务指出需要用UI线程来执行任务中的代码。 UI线程在等待GetResult完成,却又无法去运行GetResult中的代码。...这一点在winform或wpf等gui程序上可以很明显地提现出来 Task在winform中的使用 这是一个winform程序的代码片段,页面中有两个按钮,我们用maketext函数来模拟一个需要耗时的比如调用...大概的代码类似于下面这样 最终都会得出一个结论,以上代码的吞吐量要远远高于未使用异步的 当时我就很不解,await就是在等待异步代码执行完成,并不会释放请求占用的线程,为什么会提升网站的吞吐量呢?...所以异步函数在合适的场景被正确地使用也是非常重要的) 最终看了Msdn上关于异步控制器的介绍,方才找到正确的写法 以下是截取MSdn上的代码片段 首先使用 AsyncManager.OutstandingOperations.Increment

    63120

    精讲响应式WebClient第5篇-请求超时设置与异常处理

    精讲响应式WebClient第3篇-POST、DELETE、PUT方法使用 精讲响应式WebClient第4篇-文件上传与下载 本文来为大家介绍一下,当WebClient请求发生异常的时候,该如何处理..., 5) 然后执行下面的GET请求,上文WebClient的baseurl为:"http://jsonplaceholder.typicode.com" ,该网站是一个免费提供HTTP服务端测试的网站。...二是异常仍然被抛出了,没有得到返回值。 三、请求异常给出默认返回值 从第二小节中的代码及控制台输出,可以看出HTTP 客户端请求没有得到返回值,而是继续把异常对外抛出。...可以看到请求测试用例成功pass了,因为我们给出了异常处理的默认返回值,没有把异常继续抛出。...这种异常通常是用户访问了不该访问的资源,或者输入了不该输入的数据导致的。通常用HTTP状态码表示在400-499范围内。 另一种是服务端内部错误,比如:500服务内部错误、502网关错误等等。

    3.1K21

    SpringCloud升级之路2020.0.x版-40. spock 单元测试封装的 WebClient(下)

    本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 我们继续上一节,继续使用 spock 测试我们自己封装的 WebClient 测试针对...我们可以通过 spock 单元测试中,检查对于负载均衡器获取实例方法的调用次数看出来是否有重试 我们通过 httpbin.org 的 ‘/delay/秒’ 实现 readTimeout,分别验证: 测试...GET 延迟 2 秒返回,超过读取超时,这时候会重试 测试 POST 延迟 3 秒返回,超过读取超时,同时路径在重试路径中,这样也是会重试的 测试 POST 延迟 2 秒返回,超过读取超时,同时路径在重试路径中...serviceInstanceMetrics @Autowired private WebClientNamedContextFactory webClientNamedContextFactory //不同的测试方法的类对象不是同一个对象...2xx 响应码返回的重试 对于非 2xx 的响应码,代表请求失败,我们需要测试: 测试 GET 返回 500,会有重试 测试 POST 返回 500,没有重试 测试 POST 返回 400,这个请求路径在重试路径中

    31110

    重学SpringBoot3-WebClient配置与使用详解

    本文将详细介绍如何在SpringBoot 3.x中配置和使用WebClient。 2....环境准备 2.1 依赖配置 在pom.xml中添加必要的依赖: org.springframework.boot...自动错误处理:retrieve() 会自动处理 HTTP 错误状态码(例如 4xx 和 5xx),并抛出 WebClientResponseException 及其子类。...注意事项 WebClient 是非阻塞的,需要注意响应式编程的特性 合理配置连接池和超时参数 在生产环境中实现适当的错误处理和重试机制 注意内存使用,特别是处理大量数据时 7....虽然相比 RestTemplate 有一定的学习曲线,但在现代微服务架构中,其带来的好处远超过学习成本。建议在新项目中优先考虑使用WebClient,特别是在需要处理高并发请求的场景下。

    48110

    《Spring Boot 2.0 极简教程》附录 I : Spring 5.0 新特性《Spring Boot 2.0 极简教程》附录 I : Spring 5.0 新特性

    在这里,我们举一个 Spring 5.0中使用 Java 8中Lambda 表达式的例子。在Java 8里,任何函数式接口作为方法的参数传入或者作为方法返回值的场合,都可以用Lambda表达式代替。...标有来自 javax 包的注解的组件会添加到索引中,任何带 @Index 注解的类或接口都会添加到索引中。...从索引读取实体而不是全量扫描类路径, 在性能上, 对于小于 200 个类的小型项目可能没有明显差异,但对大型项目影响较大: 加载组件索引开销更低。加载组件索引的耗费是廉价的。...支持Reactor 3.1 Flux 和 Mono 以及 RxJava 1.3/2.1 作为spring mvc 控制器的方法返回值, 目标是在Spring MVC controllers中使用新的reactive...现在可以在您的单元测试中利用 Java 8 中提供的函数式编程特性。

    2.5K30

    Reactor 第十篇 定制一个生产的WebClient

    而使用 WebClient 调用第三方接口是异步和非阻塞的,它不会直接阻塞应用程序的执行,而是使用事件驱动的方式处理响应。...同时,WebClient 还提供了更灵活的重试和回退策略。Mono.fromFuture() 方法只能将 Future 对象的结果包装在 Mono 中,不提供特定的错误处理机制。...在这个等待的过程中,Mono.fromFuture()方法会阻塞当前的线程。这意味着,如果 Future 的结果在运行过程中没有返回,则当前线程会一直阻塞,直到 Future 对象返回结果或者超时。...因此,在使用 Mono.fromFuture() 时需要注意潜在的阻塞风险。另外,需要确保F uture 的任务在后台线程中执行,以免阻塞应用程序的主线程。...2 定制化自己的 WebClient 2.1 初始化 WebClient WebClient 支持建造者模式,使用 WebClient 建造者模式支持开发自己的个性化 WebClient,比如支持设置接口调用统一耗时

    62020

    WebClient抛UnsupportedMediaTypeException详解

    前言 前面分享了《Spring5的WebClient使用详解》后,就有朋友在segmentfault上给博主提了一个付费的问题,这个是博主在segmentfault平台上面收到的首个付费问答,虽然酬劳不多...但在解决问题过程中对WebClient有了更深入的了解却是另一种收获。解决这个问题博主做了非常详细的排查和解决,现将过程记录在此,供有需要的朋友参考。...segmentfault问答地址:https://segmentfault.com/q/1590000021168484 问题背景 使用WebClient请求一个接口,使用bodyToMono...后,在默认的JSON解码器里是不支持,导致抛出了不支持的MediaType异常。...,重新构造一个带Content-Type为application/json的clientResponse,但是处理逻辑是在filter里,就不需要使用exchange()了,博主以为这种方式最简洁优雅,

    69720

    别再使用 RestTemplate了,试试官方推荐的 WebClient !

    这可以在高流量应用程序中实现更好的可扩展性和更高的性能。 「函数式风格」:WebClient 使用函数式编程风格,可以使代码更易于阅读和理解。它还提供了流畅的 API,可以更轻松地配置和自定义请求。...重点:即使升级了spring web 6.0.0版本,也无法在HttpRequestFactory中设置请求超时,这是放弃使用 RestTemplate 的最大因素之一。...该函数将返回来自服务器的响应,或者如果请求由于任何原因失败,则返回一条错误消息。 请注意,在此示例中,WebClient是使用默认配置构建的。你可能需要根据不同要求进行不同的配置。...(5) 根据错误状态采取行动: 要根据Mono的subscribe()方法中的错误采取操作,可以在subscribe函数中处理响应的lambda表达式之后添加另一个lambda表达。...lambda表达式检查错误是否是WebClientResponseException的实例,这是WebClient在服务器有错误响应时抛出的特定类型的异常。

    47710

    猫头虎博主深度解析:Tomcat中的`IllegalArgumentException`异常处理全攻略 ️

    猫头虎博主深度解析:Tomcat中的IllegalArgumentException异常处理全攻略 ️ 摘要: 本文由猫头虎博主精心编撰,旨在提供一个全面的指南,帮助开发者在Tomcat环境下理解并解决...今天我们要聊聊Java开发中的一个棘手问题:java.lang.IllegalArgumentException,尤其是在Tomcat服务器环境下。...异常背景理解 1.1 IllegalArgumentException简介 IllegalArgumentException属于Java的RuntimeException,通常在传递非法或不适当的参数给方法时抛出...1.2 Tomcat和RFC标准 Tomcat是广泛使用的Java应用服务器。RFC 7230和RFC 3986定义了URI和URL的合法字符集,Tomcat严格遵守这些标准。 2....和URL字符 Tomcat Java应用服务器 异常处理 代码实现策略 总结: 在本文中,我们深入探讨了在Tomcat环境下java.lang.IllegalArgumentException的原因及其解决方案

    36810

    (5)Spring WebFlux快速上手——响应式Spring的道法术器「建议收藏」

    ); 然后我们再加入响应式数据库的支持(使用Reactive Spring Data for MongoDB); 使用WebClient与前几步做好的服务端进行通信; 最后我们看一下如何通过“流”的方式在...开启对注解编译的支持: lombok对于Java开发者来说绝对算是个福音了,希望使用Kotlin的朋友不要笑话我们土哦~ 2)增加Spring Data的依赖 在POM中增加Spring Data...1.3.3.4 使用WebClient开发响应式Http客户端 下面,我们用WebClient测试一下前边几个例子的成果。...,所以不会触发流; 上个例子中sleep的方式有点low,blockLast方法,顾名思义,在收到最后一个元素前会阻塞,响应式业务场景中慎用。...跑一下WebClient测试程序插入5条数据,然后再次请求: 请求是挂起的,这没错,但是只有两条数据,看WebClient测试程序的控制台明明发出了5个请求啊。

    4.3K20
    领券