当前位置: 首页 > 知识库问答 >
问题:

Quarkus-忽略@Path("/")的资源,而是从资源加载内容

栾和玉
2023-03-14

尝试使用@Path配置JAX-RS资源("/"), 但是,会忽略该资源并加载在资源中找到的第一个文件。

你知道如何防止这种情况并让资源发挥作用吗?清除META-INF/resources时,JAX-RS资源会正确加载。

使用:Quarkus 1.4.2。最终的

openjdk版本“11.0.6”2020-01-14 LTS openjdk运行时环境Zulu11.37 52-SA(构建11.0.6 10-LTS)openjdk 64位服务器VM Zulu11.37 52-SA(构建11.0.6 10-LTS,混合模式)

资源:

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/")
public class LandingResource {

    @GET
    @Produces(MediaType.TEXT_HTML)
    public String getLandingPage() {
        return "<html><head><title>Hello World</title></head><body>Hello!</body></html>";
    }

}

测试:

curl --location --request GET 'http://localhost:8080/'

答复:

<!doctype html>
<html lang="en">
<head>
    <title>Internal Server Error - Error handling cee4cff3-551d-44e1-9102-5c9ada9d8fb2-7, java.nio.file.InvalidPathException: Illegal char &amp;lt;:&amp;gt; at index 97: <tempdir>\vertx-cache\file-cache-71fbfca9-5ba3-4a3e-8020-8501379cbf2b\<project dir>\src\main\resources\META-INF\resources\assets\icons\icon-128x128.png</title>
    <meta charset="utf-8">
    <style>
html, body {
    margin: 0;
    padding: 0;
    font-family: 'Open Sans', Helvetica, Arial, sans-serif;
    font-size: 100%;
    font-weight: 100;
    line-height: 1.4;
}
...

共有2个答案

夹谷星纬
2023-03-14

默认情况下,Quarkus将从根上下文提供静态资源。这意味着src/main/resources/META-INF/resources/code>中的资源已经映射到root(http://localhost:8080/)。这意味着您无法在根目录上轻松映射标准JAX-RS。

有关详细信息,请参阅留档:https://quarkus.io/guides/http-reference

在您的情况下,您将返回一个固定的HTML登录页。作为一种解决方案,您可以删除LandingResource类,并从静态资源中提供登录页。

这可以通过将超文本标记语言片段放置在src/main/资源/META-INF/资源/index.html中来实现。

这也是默认Quarkus默认登录页的服务方式。

申屠晟
2023-03-14

通过添加vertx web路由实现了预期效果:

import io.quarkus.vertx.web.Route;
import io.vertx.core.http.HttpMethod;
import io.vertx.ext.web.RoutingContext;

import javax.enterprise.context.ApplicationScoped;

@ApplicationScoped
public class LandingRoute {

    @Route(path = "/", methods = HttpMethod.GET)
    public void landing(RoutingContext rc) {
        rc.response().end("hello ");
    }
}

 类似资料:
  • 但是,试图使用@path("/“)配置JAX-RS资源时,该资源被忽略,而在resources中找到的第一个文件被加载。 有没有办法防止这种情况并允许资源工作?清除meta-inf/resources时,JAX-RS资源会正确加载。 答复:

  • 在使用Maven捆绑JAR文件中的资源时,我有一种感觉,我错过了一些关键的东西。我的目录结构是标准的Maven结构(即\src\main\java,\src\main\Resources)。 使用IDE时,我将资源文件引用为\main\resources\images\blah。。。它工作得很好,但当Maven捆绑JAR文件时,它会将路径放在相对于根的位置(“\ images\blah”),因此没

  • 我正在尝试将资源csv文件传递到我的Sprint Boot应用程序使用的jar中。尽管方法获取的资源参数=ReactiveWebContext资源[src/main/Resources/file.csv],但我总是得到该文件不存在的响应 > 在我的项目中,文件位于src/main/resources/file中。csv 正在应用中。属性,我定义: 在config类中: 在内部jar:Config类

  • 当我调用我的api时,在ios9中遇到了这个错误,但它在ios8中运行良好,资源无法加载,因为应用程序传输安全策略要求使用安全连接

  • 浏览器允许我们跟踪外部资源的加载 —— 脚本,iframe,图片等。 这里有两个事件: onload —— 成功加载, onerror —— 出现 error。 加载脚本 假设我们需要加载第三方脚本,并调用其中的函数。 我们可以像这样动态加载它: let script = document.createElement('script'); script.src = "my.js"; docume

  • CodeIgniter 的"自动加载"特性可以允许系统每次运行时自动初始化类库、辅助函数和模型。 如果你需要在整个应用程序中全局使用某些资源,为方便起见可以考虑自动加载它们。 支持自动加载的有下面这些: libraries/ 目录下的核心类 helpers/ 目录下的辅助函数 config/ 目录下的用户自定义配置文件 system/language/ 目录下的语言文件 models/ 目录下的模