0

我有一个用例,我通过 Camel 中的队列(RabbitMQ)接收随机消息(带有 JSON 有效负载),我需要将这些 JSON 有效负载转换为 CSV 格式以存储在文件中。我所拥有的大部分都在工作,但是当我尝试将“generateHeaderColumns=true”添加到我拥有的 POJO 上的 @CsvRecord 注释中时,我会为我最终得到的每个“行”重复列标题。例如,考虑 Camel 中的以下路线:

from("rabbitmq://localhost:5672/testexchange?routingKey=create")
    .unmarshal().json(JsonLibrary.Jackson, MyModel.class)
    .marshal().bindy(BindyType.Csv, MyModel.class)
    .to("file://c:/ftproot?fileName=export.$simple{date:now:MM.dd.yyyy}.csv&fileExist=Append")

以下是 MyModel.class POJO:

import org.apache.camel.dataformat.bindy.annotation.CsvRecord;
import org.apache.camel.dataformat.bindy.annotation.DataField;

@CsvRecord(separator=",", crlf="UNIX", generateHeaderColumns=true)
public class MyClass
{
    @DataField(pos = 1, columnName="System ID")
    private String identifier;

    @DataField(pos = 2, columnName="Full Name")
    private String name;

    public void setIdentifier(String identifier)
    {
        this.identifier = identifier;
    }

    public String getIdentifier()
    {
        return identifier;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public String getName()
    {
        return name;
    } 
}

但是,如果我将多个 JSON 有效负载发送到队列,我最终会得到以下结果:

System ID,Full Name
208557,Linus Van Pelt
System ID,Full Name
273053,Charlie Brown
System ID,Full Name
206541,Lucy Van Pelt
System ID,Full Name
279876,Sally Brown 

当我查看 Bindy 的代码时,它在做什么是有道理的,因为解组步骤不知道最终结果是一个文件......但是我如何让结果文件具有解组的 CSV 记录,但只有一“行”的列标题?还有其他方法可以做到这一点吗?换句话说,我如何使用队列来接收随机消息,但让文件以这样的方式结束?

System ID,Full Name
208557,Linus Van Pelt
273053,Charlie Brown
206541,Lucy Van Pelt
279876,Sally Brown
4

0 回答 0