在我的 webflux 应用程序中,我有这个GET端点
v3/callback?state=cGF5bWVudGlkPTRiMmZlMG
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用编写集成测试 WebTestClient
@Test
public void happyScenario() {
webTestClient.get().uri("/v3/callback?state=cGF5bWVudGlkPTRiMmZlMG")
.exchange()
.expectStatus()
.isOk();
}
Run Code Online (Sandbox Code Playgroud)
这个测试用例返回404 notFound,如果我删除了查询参数,它将被调用,但state参数将丢失
我试着用 attribute
webTestClient.get().uri("/v3/callback")
.attribute("state","cGF5bWVudGlkPTRiMmZlMG")
.exchange()
.expectStatus()
.isOk();
Run Code Online (Sandbox Code Playgroud)
但仍然state缺少参数,使用时如何在请求中包含查询参数webTestClient?
我在 POST 请求中收到一些 XML 有效负载,并希望看到接收到的有效负载以进行调试。
下面(我的自定义 WebFilter)代码按预期记录了 URI 和请求标头,但没有记录请求正文/有效负载,我的反应式代码一定有问题 -
final ServerHttpRequest request = exchange.getRequest();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
LOGGER.info("Request: uri={}", request.getURI());
LOGGER.info("Request: headers={}", request.getHeaders().entrySet());
request.getBody().doOnNext(dataBuffer -> {
try {
Channels.newChannel(baos).write(dataBuffer.asByteBuffer().asReadOnlyBuffer());
String body = new String(baos.toByteArray());
LOGGER.info("Request: payload={}", body);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
});
Run Code Online (Sandbox Code Playgroud)
我查看了布赖恩对下面帖子的回复并遵循了它,但由于没有代码,我可能犯了一些愚蠢的错误
更新代码
@Configuration
public class RequestFilter implements WebFilter {
private static final Logger LOGGER = …Run Code Online (Sandbox Code Playgroud)