如何使用Apache Camel REST DSL简单地返回字符串

6bc51xsx  于 2022-11-07  发布在  Apache
关注(0)|答案(2)|浏览(246)

我尝试使用ApacheCamelRESTDSL创建一个简单的RESTAPI,该API在被调用时应该只返回一个String。
但是,虽然下面的代码曾经可以正常工作,但API似乎已经发生了变化

rest().get("/hello-world").produces(MediaType.APPLICATION_JSON_VALUE).route()
      .setBody(constant("Welcome to apache camel test ")).endRest();

route()Apache Camel 3.17.0中已不存在

我也试过

rest("/say")
    .get("/hello")
    .responseMessage(200, "Hello World");

但这会返回空字符串而不是“Hello World”
到目前为止,唯一有效的方法是创建一条额外的路径

rest("/say")
    .get("/hello")
    .to("direct:build-return-message");

from("direct:build-return-message")
    .setBody(simple("Hello World"));

但这不可能是首选的方式。

现在如何使用最新的API设置响应正文?

frebpwbc

frebpwbc1#

虽然在Rest-DSL中不能再定义返回字符串的简单路由,但可以使用camels language component通过常量、简单语言或使用resources文件夹中的文件来实现类似的功能。

rest("/api")
    .description("Some description")
    .get("/constant")
        .produces("text/plain")
        .to("language:constant:Hello world")
    .get("/simple")
        .produces("text/html")
        // Usage {{host}}:{{port}}/api/simple?name=Bob
        .to("language:simple:<html><body><h1>hello ${headers.name}</h1></body></html>")
    .get("/resource")
        .produces("text/html")
        // Displays project/src/main/resources/pages/hello.html
        .to("language:constant:resource:classpath:pages/hello.html")
;

不幸的是,语言组件的例子非常少,因为它看起来像是一个处理一堆小事情的方便工具。

f4t66c6m

f4t66c6m2#

也许像这样的东西?

rest()
    .get("/hello")
    .route()
    .process( e -> e.getMessage().setBody("Hello World") ) ;

相关问题