java - ServerResponseFilter 未应用于 GET
问题描述
我有一个具有以下过滤器定义的 Quarkus 应用程序:
@ApplicationScoped
@Slf4j
public class Filters {
// some @Inject parameters i'm using
@ServerRequestFilter(preMatching = true)
public void requestLoggingFilter(ContainerRequestContext requestContext) {
log.info("Recv: [{}] {}, {}", requestContext.getHeaderString("myHeader"), requestContext.getMethod(), requestContext.getUriInfo().getRequestUri());
}
@ServerResponseFilter
public void responseBasicHeaderFilter(ContainerResponseContext responseContext) {
responseContext.getHeaders().putSingle("myHeader, "myValue");
}
@ServerResponseFilter
public void responseLoggingFilter(ContainerResponseContext responseContext) {
log.info("Sent: [{}] {} {}", responseContext.getHeaderString("myHeader"), , responseContext.getStatusInfo(), responseContext.getEntity());
}
}
我有两个测试:测试类配置:
@QuarkusTest
public class MyTest {
...
}
测试一:
final Response response = given()
.post(BASE_URL)
.then()
.extract().response();
assertEquals(200, response.getStatusCode(), () -> "Got: " + response.prettyPrint());
assertEquals("myValue", response.getHeader("myHeader"));
final Response response2 = given()
.get(BASE_URL)
.then()
.extract().response();
assertEquals(200, response2.getStatusCode(), () -> "Got: " + response2.prettyPrint());
assertEquals("myValue", response2.getHeader("myHeader"));
测试 B:
final Response response = given()
.post(BASE_URL)
.then()
.extract().response();
assertEquals(200, response.getStatusCode(), () -> "Got: " + response.prettyPrint());
assertEquals("myValue", response.getHeader("myHeader"));
如果我自己运行测试 B,它会通过。
如果我运行测试 A,但是最后一个断言失败(标题值不存在)。
@ServerResponseFilter
似乎没有超过第一次调用,但似乎@ServerRequestFilter
很好。
我已经手动测试了 api 并且可以确认相同的行为。首先调用 GET 请求也将具有相同的行为。
我已经验证我的 Controller (pojo) 生成的响应是成功生成的。
是什么阻止了它重新运行?
解决方案
原来它与 GET 与 POST 无关
我的 GET 方法返回一个 Multi 。我将它转换为 Uni> 并且它起作用了。
从文档中我发现了这个片段
Reactive developers may wonder why we can't return a stream of fruits directly. It tends to eb a bad idea with a database....
关键字是we can't
所以我想这是不支持的功能
推荐阅读
- php - Apache、PHP 5.6 或 7.0:未加载库:openssl/lib/libcrypto.1.0.0.dylib 使用 Homebrew
- django - 基于国外模型字段值django的唯一约束
- google-chrome-devtools - DevTools - 关闭问题警告?
- macos-catalina - MacOS升级到10.15.X(Catalina)后无法打开JDK
- graphql - 如何在 appsync 中定义解析器以获取 graphQL 中特定日期之间的数据范围
- python - 将数据透视表中的 15 分钟间隔使用数据转换为 60 分钟格式
- python - Matplotlib 轴混淆
- c++ - 删除用户定义的 C++ 头文件中的 .h 扩展名
- node.js - npm 安装问题... npm ERR!代码 E400
- apache-kafka - kafka 消费者组的消费者数量