gpt4 book ai didi

java - 使用 Camel 路线提供静态文件

转载 作者:行者123 更新时间:2023-11-30 07:51:10 25 4
gpt4 key购买 nike

我正在尝试在 Camel route 提供静态文件。

我的主类中的路由包含这段代码:

public final void configure() throws Exception {
// declaring camel routes
// match on uri prefix must be true when parameters are passed as part of the uri
// for example, "http://localhost/hello/rick"
// http.port is in local.properties file user-api

from("jetty:http://0.0.0.0:{{http.port}}/user/dist/?matchOnUriPrefix=true")
.process( new StaticProcessor( "help", "index.html", "dist"))
.routeId( "static");

from("jetty:http://0.0.0.0:{{http.port}}/user?matchOnUriPrefix=true")
.to("cxfbean:userService");
}

这很好用。当我点击 url:http://xxxx:8086/user/dist/index.html 时,我的索引页面被呈现并且 url 显示为 http://xxxx:8086/user/dist/ 在 url 栏中。

但是当我重新加载页面(按 F5)时,url 变为:http://xxxx:8086/user/dist// 并且出现如下错误:

This page should have been replaced by Swagger. Do you have the following in your application's pom.xml as the only reference to the swagger-maven-plugin?

    <build>
<plugins>
<plugin>
<groupId>com.github.kongchen</groupId>
<artifactId>swagger-maven-plugin</artifactId>
<executions>
<execution>
<id>swagger</id>
<phase>compile</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>

我的有效 POM 中有这种依赖性。那我错过了什么?

我希望实现任何带有 http://clv035sl-8947d6:8888/user/dist 的 url 都应该将调用路由到 index.html。为什么我需要在 url 末尾显式写入 index.html

我们将不胜感激任何帮助/建议。

最佳答案

我制作了一个简单的 JUnit 测试用例来测试您基于 this blog post 的场景.

StaticProcessor 类的实现在哪里?我已经为这个场景实现了一些非常相似的东西(恕我直言):

public void configure() throws Exception {

from("jetty:http://0.0.0.0:8080/user/dist?matchOnUriPrefix=true").process(new Processor() {

public void process(Exchange exchange) throws Exception {
Message in = exchange.getIn();

String relativepath = in.getHeader(Exchange.HTTP_PATH, String.class);
String requestPath = in.getHeader("CamelServletContextPath", String.class); //CamelServletContextPath

if (relativepath.isEmpty() || relativepath.equals("/")) {
relativepath = "index.html";
}

final String formattedPath = String.format("%s/%s", requestPath, relativepath);
InputStream pathStream = this.getClass().getResourceAsStream(formattedPath);
Path path = FileSystems.getDefault().getPath(this.getClass().getResource(formattedPath).getPath());

Message out = exchange.getOut();
try {
out.setBody(IOUtils.toByteArray(pathStream));
out.setHeader(Exchange.CONTENT_TYPE, Files.probeContentType(path));
} catch (IOException e) {
out.setBody(relativepath + " not found.");
out.setHeader(Exchange.HTTP_RESPONSE_CODE, "404");
}
}
}).routeId("static");
}

它从类路径中获取需要公开的资源,并将输出消息设置为响应。请看一下整个 test case .

我测试了以下网址:

请注意,我像您一样添加了 swagger 插件依赖项。

让我知道这是否有帮助或指出 StaticProcessor 实现的位置,我可以用它进行测试并编辑我的答案。

干杯

关于java - 使用 Camel 路线提供静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47406799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com