如何在@DataField Camel注释中将defaultValue参数设置为空String而不是null?

时间:2016-07-07 13:24:35

标签: java csv apache-camel bindy

我尝试使用apache camel和bindy解组csv文件。我创建了一个模型,其中的一些字段注释如下:

@DataField(pos = 5, defaultValue = "")

问题是我的csv文件包含一个空字符串的列。然后,由于解组,我得到一个空值。我想在那里也有空字符串。我该怎么写我的注释才能得到它?

2 个答案:

答案 0 :(得分:1)

版本(2.18.0)似乎有支持。

将字符串标记(从CSV文件)转换为@DataField注释的字段时,步骤如下:

  1. 如果trim = true,请修剪string-token
  2. 如果需要且string-token为"",则抛出异常
  3. 根据字段类型
  4. 获取适当的转换器
  5. 如果字符串标记不是""在string-token
  6. 上使用转换器
  7. 如果指定了默认字符串,则使用默认
  8. 上的转换器
  9. 如果java原语(例如int)返回适当的值(MIN)
  10. else return null
  11. 版本2.18.0引入了一个新的注释@BindyConverter,允许您指定任何符合Format接口的类(有效拦截上面的步骤#3)

    自定义转换器允许您读取默认值并根据您自己的要求进行转换(在上面的步骤#5中)。您的转换器还需要处理步骤#4,但这对于Strings来说是微不足道的。

答案 1 :(得分:1)

我遵循@Darius X的评论,这对我有用:

@Column
@DataField(pos = 1, defaultValue = "default")
@BindyConverter(CustomConverter.class)
private String someField= "";

public static class CustomConverter implements Format<String> {
    @Override
    public String format(String object) {
        return "";
    }

    @Override
    public String parse(String string) {
        return "";
    }
}