使用骆驼路线从bean方法返回值生成JSON

时间:2019-04-26 11:53:09

标签: java apache-camel

我有一个带有构造对象列表的方法的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的文件。伙计们,我在想什么!

1 个答案:

答案 0 :(得分:2)

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

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

您的方法被命名为constructObject,而不是constructObject s ,但是我认为这是一个错字,因为否则会出现错误。

我无法模拟的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"]