在Apache Camel RouteBuilder中发送HTML文件



我有一个HTML文件,我想将其作为Apache camel RouteBuilder中rest调用的响应发送。代码如下

public class RestEndpointRouteBuilder extends RouteBuilder {
@Override
public void configure() {
rest("/form")
.post()
.produces(MediaType.TEXT_HTML_VALUE)
.to("file:target/classes/static/form.html");
}

但是,当我调用API 时,我得到了以下错误

org.apache.camel.component.file.GenericFileOperationFailedException: Cannot write null body to file: targetclassesstaticform.htmlID-*****-***-****
at org.apache.camel.component.file.FileOperations.storeFile(FileOperations.java:245)
at org.apache.camel.component.file.GenericFileProducer.writeFile(GenericFileProducer.java:277)
at org.apache.camel.component.file.GenericFileProducer.processExchange(GenericFileProducer.java:165)
at org.apache.camel.component.file.GenericFileProducer.process(GenericFileProducer.java:79)
at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:145)

基本上,我想返回一个HTML文件,这是一个ReactJS应用程序,以及JS缩小的文件。有人能帮我做这个吗?

您的代码中存在以下几个问题:

  1. 更合适的HTTP方法是GET而不是POST
  2. 这里的文件组件是一个to端点,因此它被用作生产者,换句话说,它将保存到文件中,而不是像您期望的那样读取它
  3. 文件组件的URI不正确,URI格式为file:directoryName[?options],这意味着target/classes/static/form.html应该是目录,而不是文件

您尝试实现的目标可以如下所述:

rest("/form")
// Fix #1: Use "get" instead of "post"
.get() 
.produces(MediaType.TEXT_HTML)
.to("direct:fileContent");
from("direct:fileContent")
// Fix #2: Use "pollEnrich" to use the file component as a 
// consumer to read the file
// Fix #3: Fix the URI to have the directory name on one side  
// and the file name on the other side
.pollEnrich("file:target/classes/static?fileName=form.html"); 

注意:即使我上面描述的内容有效,请注意,rest端点并不用于静态内容,您应该使用反向代理

最新更新