@Component
public class MdcWebFilter implements WebFilter {
@NotNull
@Override
public Mono<Void> filter(@NotNull ServerWebExchange serverWebExchange,
WebFilterChain webFilterChain) {
Mono<Void> filter = webFilterChain.filter(serverWebExchange);
return filter
.doAfterSuccessOrError(new BiConsumer<Void, Throwable>() {
@Override
public void accept(Void aVoid, Throwable throwable) {
//Here i would like to be able to access to the request's context
System.out.println("doAfterSuccessOrError:" + (throwable==null ? "OK" : throwable.getMessage())+"log the context");
}
})
.doOnEach(new Consumer<Signal<Void>>() {
@Override
public void accept(Signal<Void> voidSignal) {
//Here i have the context but i don't really know if i am in success or error
System.out.println("doOnEach:"+"Log OK/KO and the exception" + voidSignal.getContext());
}
})
.subscriberContext(context -> context.put("somevar", "whatever"));
}
}
我还尝试了一个flatMap()和一个mono.subscriberContext(),但我不确定如何正确地插入过滤器(特别是在错误的情况下)。
实现这一目标的最佳方法是什么?
我不确定是否可能从WebFilter中访问请求反应器上下文。WebFilter上下文存在于另一个Mono链中。但是,可以将属性与请求关联起来,并且能够在请求生命期内获取这些属性,这与Servlet API非常类似。
控制器:
@GetMapping(path = "/v1/customers/{customerId}")
public Mono<Customer> getCustomerById(
@PathVariable("customerId") String customerId,
ServerWebExchange serverWebExchange)
{
serverWebExchange.getAttributes().put("traceId", "your_trace_id");
return customerService.findById(customerId);
}
WebFilter:
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
// ...
String traceId = exchange.getAttributeOrDefault("traceId", "default_value_goes_here");
//...
return chain.filter(exchange);
}
问题内容: 我希望能够列出用户已添加的项目(他们被列为创建者)或已被批准的项目。 所以我基本上需要选择: 我将如何在Django中执行此操作?(最好使用过滤器或查询集)。 问题答案: 有些对象允许进行复杂的查找。例:
问题内容: 我正在尝试获取IP范围查询以处理一组文档,但是没有任何结果。 映射(我已经尝试了和): 数据看起来像这样(许多实例的值都不同) 现在,我去看了官方的ES文档,但是没有IP范围示例,但是我在Git上找到了一个不起作用的示例。它看起来如下: 当我用手指指住字段和地址时,上面的方法引发了一些令人鼓舞的解析错误,但最终没有返回结果。 我还尝试了标准范围语法: 这也没有返回结果。如何查询一系列I
问题内容: 我已经读过这个问题,我的一个同事让我感到怀疑: 在过滤查询中,何时应用过滤器?在执行查询之前还是之后?什么时候缓存结果? 如果事先应用了过滤器,那么在过滤器中复制查询部分不是一件好事吗?如果之后应用了筛选器,那么我将无法理解缓存的内容。 问题答案: 幸运的是,ES为您提供了两种类型的过滤器供您使用: 在第一种情况下,过滤器将应用于查询找到的所有文档。在第二种情况下,将在查询运行之前过滤
问题内容: 我什么时候应该使用查询或过滤器或两者的某种组合都看不到任何描述。它们之间有什么区别?谁能解释一下? 问题答案: 区别很简单:过滤器被缓存并且不影响得分,因此比查询要快。也在这里看看。假设查询通常是用户输入的内容,并且几乎是不可预测的,而过滤器则可以帮助用户缩小搜索结果的范围,例如使用构面。
问题内容: 我需要从Django模板中执行过滤查询,以获取与视图中的python代码等效的一组对象: 在我的模板中,我想做 但我似乎无法找出如何编写FILTER。 问题答案: 你不能这样做,这是设计使然。Django框架的作者打算将表示代码与数据逻辑严格分开。过滤模型是数据逻辑,而输出HTML是表示逻辑。 因此,你有几种选择。最简单的方法是进行过滤,然后将结果传递给。或者,你可以在模型中编写一个方
问题内容: “过滤后的查询和过滤器”与“根查询和过滤器”之间有什么区别吗?例如 情况1: 情况2: 我在http://elasticsearch-users.115913.n3.nabble.com/Filtered-query-vs-using- filter-outside-td3960119.html中 找到了此讨论,但所引用的URL是404,并且解释过于简洁我。 请示教或提供指出这些区别的