Java 如何将@DataField Camel注释中的defaultValue参数设置为空字符串而不是空字符串?

Java 如何将@DataField Camel注释中的defaultValue参数设置为空字符串而不是空字符串?,java,csv,apache-camel,bindy,Java,Csv,Apache Camel,Bindy,我尝试使用ApacheCamel和bindy来解组csv文件。我创建了一个带有如下注释的字段的模型: @DataField(pos = 5, defaultValue = "") 问题是当我的csv文件包含一个空字符串的列时。然后,由于解组,我得到了一个空值。我想有空字符串也有。我应该如何编写注释以获得此信息?版本(2.18.0)似乎有支持 将字符串标记(从CSV文件)转换为@DataField注释的字段时,步骤如下: 如果trim=true,则修剪字符串标记 如果需要且字符串标记为“”,则引

我尝试使用ApacheCamel和bindy来解组csv文件。我创建了一个带有如下注释的字段的模型:

@DataField(pos = 5, defaultValue = "")
问题是当我的csv文件包含一个空字符串的列时。然后,由于解组,我得到了一个空值。我想有空字符串也有。我应该如何编写注释以获得此信息?

版本(2.18.0)似乎有支持

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

  • 如果trim=true,则修剪字符串标记
  • 如果需要且字符串标记为“”,则引发异常
  • 根据字段的类型获取适当的转换器
  • 如果字符串标记不是“”,请使用字符串标记上的转换器
  • 否则,如果指定了默认字符串,请在默认字符串上使用转换器
  • 否则,如果java原语(例如int)返回适当的值(MIN)
  • 否则返回空值
  • 版本2.18.0引入了一个新的注释@BindyConverter,允许您指定任何遵循Format接口的类(有效地拦截了上述第3步)


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

    我在@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 "";
        }
    }
    
    @列
    @数据字段(pos=1,defaultValue=“default”)
    @BindyConverter(CustomConverter.class)
    私有字符串someField=“”;
    公共静态类CustomConverter实现格式{
    @凌驾
    公共字符串格式(字符串对象){
    返回“”;
    }
    @凌驾
    公共字符串解析(字符串){
    返回“”;
    }
    }
    
    谢谢您的回答,但我使用的是Camel 2.17.0,我的测试以错误结束:org.junit.ComparisonFailure:预期:但是是:。在读取值后,trim似乎对我不起作用。知道为什么吗?对不起,也许我搞错了。在昨天回答之前,我确实运行了一些代码来测试这一点,但现在无法复制它。也许是我玩这个游戏时做的其他事情。我将重试并编辑或删除我的答案。。。这取决于我的发现。这是不是因为当字符串为空时我需要null,并且无论如何都不需要这样做