Quarkus Reactive Routes:uber jar 中的不同行为

Quarkus Reactive Routes: different behaviour in uber jar

this guide 之后,我已将我的 Quarkus 应用程序配置为 return 当在 META-INF/resources/ 中找不到文件时的自定义错误页面。

@ApplicationScoped
public class FileNotFoundHandler {

    @Route(methods = Route.HttpMethod.GET, regex = "^/.+")
    void activate404Intercepting(RoutingContext rc) {
        ((RoutingContextImpl) rc).currentRouter()
                .errorHandler(404, errorContext -> errorContext.response()
                        .sendFile("notfoundpage.html")
                );
        rc.next();
    }

}

当我在开发模式下使用 Quarkus 在本地 运行 我的代码时,这工作得很好。但是,当我构建一个 uber jar 时,行为有所不同:当我尝试访问未知路径时出现超时。

为什么我的 uber jar 表现不同,我该如何解决这个问题?任何帮助将不胜感激。

经过一些调试,我发现在uber jar中调用了activate404Intercepting,但是notfoundpage.html因为在其他位置,相对路径没有找到。

我的解决方案:

@ApplicationScoped
public class FileNotFoundHandler {

    private static final String INDEX_FILE_LOCATION = getPathToIndexFile();

    private static String getPathToIndexFile(){
        return Objects.nonNull(FileNotFoundHandler.class.getClassLoader().getResource("notfoundpage.html")) ?
            "notfoundpage.html" : "META-INF/resources/notfoundpage.html";
    }

    @Route(methods = Route.HttpMethod.GET, regex = "^/.+")
    void activate404Intercepting(RoutingContext rc) {
        ((RoutingContextImpl) rc).currentRouter()
                .errorHandler(404, errorContext -> errorContext.response()
                        .sendFile(INDEX_FILE_LOCATION)
                );
        rc.next();
    }

}