Filter 使用micronaut过滤器时缺少某些内容

Filter 使用micronaut过滤器时缺少某些内容,filter,documentation,micronaut,Filter,Documentation,Micronaut,我正试图使用文档第6.18节中记录的示例代码在micronaut microservice中实现过滤器: 我有一个HelloWord服务,它本质上与文档中提供的服务相同,带有一个指向“/hello”(如文档所示)的控制器。我还使用第6.18节中提供的相同TraceService和trace筛选器。我正在编译和运行服务器,没有问题 不幸的是,当我测试微服务时,过滤器没有被使用 我很确定我的代码中缺少了一些东西,但正如我所说的,我使用的代码与示例中的代码相同: TraceService Class

我正试图使用文档第6.18节中记录的示例代码在micronaut microservice中实现过滤器:

我有一个HelloWord服务,它本质上与文档中提供的服务相同,带有一个指向“/hello”(如文档所示)的控制器。我还使用第6.18节中提供的相同TraceService和trace筛选器。我正在编译和运行服务器,没有问题

不幸的是,当我测试微服务时,过滤器没有被使用

我很确定我的代码中缺少了一些东西,但正如我所说的,我使用的代码与示例中的代码相同:

TraceService Class

import io.micronaut.http.HttpRequest;
import io.reactivex.Flowable;
import io.reactivex.schedulers.Schedulers;
import org.slf4j.*;

import javax.inject.Singleton;
@Singleton
public class TraceService {

    private static final Logger LOG = LoggerFactory.getLogger(TraceService.class);

    Flowable<Boolean> trace(HttpRequest<?> request) {
        System.out.println("TRACE ENGAGED!");
        return Flowable.fromCallable(() -> { 
            if (LOG.isDebugEnabled()) {
                LOG.debug("Tracing request: " + request.getUri());
            }
            // trace logic here, potentially performing I/O 
            return true;
        }).subscribeOn(Schedulers.io()); 
    }
}


Trace Filter    

import io.micronaut.http.*;
import io.micronaut.http.annotation.Filter;
import io.micronaut.http.filter.*;
import org.reactivestreams.Publisher;

@Filter("/hello/**") 
public class TraceFilter implements HttpServerFilter { 
    private final TraceService traceService;

    public TraceFilter(TraceService traceService) { 
        System.out.println("Filter created!");
        this.traceService = traceService;
    }

    @Override
    public Publisher<MutableHttpResponse<?>> doFilter(HttpRequest<?> request, ServerFilterChain chain) {
        System.out.println("Filter engaged!");
        return traceService.trace(request) 
                           .switchMap(aBoolean -> chain.proceed(request)) 
                          .doOnNext(res -> res.getHeaders().add("X-Trace-Enabled", "true")
                   );
    }
}

The Controller

import io.micronaut.http.annotation.*;

@Controller("/hello") 
public class HelloController {
  @Get("/") 
  public String index() {
    return "Hello World"; 
  }
}
TraceService类
导入io.micronaut.http.HttpRequest;
导入io.reactivex.Flowable;
导入io.reactivex.schedulers.schedulers;
导入org.slf4j.*;
导入javax.inject.Singleton;
@独生子女
公共类跟踪服务{
私有静态最终记录器LOG=LoggerFactory.getLogger(TraceService.class);
可流动跟踪(HttpRequest请求){
System.out.println(“跟踪已接通!”);
返回Flowable.fromCallable(()->{
if(LOG.isDebugEnabled()){
调试(“跟踪请求:+request.getUri());
}
//此处跟踪逻辑,可能执行I/O
返回true;
}).subscribeOn(Schedulers.io());
}
}
跟踪过滤器
导入io.micronaut.http.*;
导入io.micronaut.http.annotation.Filter;
导入io.micronaut.http.filter.*;
导入org.reactivestreams.Publisher;
@过滤器(“/hello/**”)
公共类TraceFilter实现HttpServerFilter{
专用最终跟踪服务跟踪服务;
公共TraceFilter(TraceService TraceService){
System.out.println(“过滤器已创建!”);
this.traceService=traceService;
}
@凌驾
公共出版商问题已解决

如果将过滤器和服务文件放在正确的位置,实际上会有很大的帮助。当我制作文件并将它们放在测试区域而不是开发区域时,已经很晚了。一旦放在正确的位置,过滤器就被正确地注入到微服务中

各位,很抱歉在这里浪费了空间。海报有没有办法删除一篇尴尬的帖子