【发布时间】:2021-01-19 02:43:12
【问题描述】:
我想向我的 armeria 客户端添加一个装饰器,如果返回了某个 http 标头,它会检查每个 http 响应:
builder.decorator((delegate, ctx, req) -> {
final HttpResponse response = delegate.execute(ctx, req);
final AggregatedHttpResponse r = response.aggregate().join();
for (Map.Entry<AsciiString, String> header : r.headers()) {
if ("warning".equalsIgnoreCase(header.getKey().toString())) {
throw new IllegalArgumentException("Detected usage of deprecated API for request "
+ req.toString() + ":\n" + header.getValue());
}
}
return response;
});
但是,当启动我的客户端时,它会阻止 join() 调用并永远等待。在 Armeria 有标准模式吗?大概我不能仅仅阻止拦截器中的响应,但是我找不到访问响应标头的方法。不过,使用subscribe 或toDuplicator 并没有更好的效果。
【问题讨论】:
-
与问题没有直接关系,但您可以使用
ResponseHeaders.contains(),因为 Armeria 中的标题名称始终是小写的。 -
确实,感谢@trustin,您的以下建议非常有效!
-
我的荣幸。让我期待您的更多问题????
标签: armeria