首页 > 解决方案 > 使用骆驼路由从 bean 方法返回值生成 JSON

问题描述

我有一个带有构造对象列表的方法的bean。我想从这个 POJO 列表中生成一个带有 jackson 的 json。

public class SimpleBean {
     public List<Object> constructObject() {
       List<Object> objects = new ArrayList<>();
       // construct objects
       return objects;
     }
}

然后在我的骆驼路线中,我想从我的 bean 方法生成 json。在这里我做了什么,似乎没有工作

@Override
public void configure() throws Exception {
    from("quartz expression")
            .log(LoggingLevel.INFO, LOGGER, "work started")
            .bean(simpleBean, "constructObjects")
            .marshal()
            .json(JsonLibrary.Jackson)
            .to("file:C:/data/export/JSON")
            .setHeader(Exchange.FILE_NAME, constant("test.json"))
            .log(LoggingLevel.INFO, LOGGER, "work completed");
}

camel 返回一个文件,其 UUID 没有扩展名,内容为 NULL。我在这里想念什么!?

标签: javaapache-camel

解决方案


要设置文件名,您必须在调用文件之前设置标题:

        .setHeader(Exchange.FILE_NAME, constant("test.json"))
        .to("file:C:/data/export/JSON")

你的方法被命名为constructObject而不是constructObject 但我认为这是一个错字,否则你会得到一个错误。

NULL 我无法模拟。有以下路线:

public static class SimpleBean {
    public List<Object> constructObject() {
           List<Object> objects = new ArrayList<>();
           objects.add("entry");
           return objects;
         }
}

@Override
protected RouteBuilder createRouteBuilder() {
    return new RouteBuilder() {

        public void configure() {
            from("direct:start")
            .bean(SimpleBean.class, "constructObject")
            .marshal().json(JsonLibrary.Jackson)
            .setHeader(Exchange.FILE_NAME, constant("test.json"))
            .to("file:C:/tmp/JSON");
        }
    };
}

我得到一个名为 test.json 的输出文件,内容如下:

["entry"]

推荐阅读