3

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

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

问题是当我的 csv 文件包含一个带有空字符串的列时。然后我得到一个空值作为解组的结果。我也想在那里有空字符串。我应该如何写我的注释来得到这个?

4

2 回答 2

2

版本 (2.18.0) 似乎有支持。

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

  1. 如果 trim=true,则修剪 string-token
  2. 如果需要且字符串标记为“”,则抛出异常
  3. 根据字段的类型获取适当的转换器
  4. 如果 string-token 不是 "" 使用 string-token 上的转换器
  5. 否则,如果指定了默认字符串,则在默认值上使用转换器
  6. 否则,如果 java 原语(例如 int)返回适当的值(MIN)
  7. 否则返回空

2.18.0 版引入了一个新的注解@BindyConverter,允许您指定任何符合 Format 接口的类(有效地拦截了上面的第 3 步)

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

于 2016-07-07T18:00:52.343 回答
2

我关注了@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 "";
    }
}
于 2018-10-05T15:59:16.880 回答