javabeans - 如何解析 Opencsv HeaderColumnNameMappingStrategy 中的非字符串值

标签 javabeans opencsv

我正在使用 HeaderColumnNameMappingStrategy 将带有 header 的 csv 文件映射到 JavaBean。字符串值可以很好地解析,但 csv 中的任何“真”或“假”值都不会映射到 JavaBean,我从 PropertyDescriptor 中得到以下异常:

java.lang.IllegalArgumentException: argument type mismatch

它出现的代码在 CsvToBean 的第 64 行:

protected T processLine(MappingStrategy<T> mapper, String[] line) throws  
 IllegalAccessException, InvocationTargetException, InstantiationException, IntrospectionException {
    T bean = mapper.createBean();
    for(int col = 0; col < line.length; col++) {
        String value = line[col];
        PropertyDescriptor prop = mapper.findDescriptor(col);
        if (null != prop) {
            Object obj = convertValue(value, prop);
            // this is where exception is thrown for a "true" value in csv
            prop.getWriteMethod().invoke(bean, new Object[] {obj});
        }
    }
    return bean;
}

 protected PropertyEditor getPropertyEditor(PropertyDescriptor desc) throws   
       InstantiationException, IllegalAccessException {
    Class<?> cls = desc.getPropertyEditorClass();
    if (null != cls) return (PropertyEditor) cls.newInstance();
    return getPropertyEditorValue(desc.getPropertyType());
}

我可以确认(通过调试器)此时已正确检索到 setter 方法 ID。

问题出现在 desc.getPropertyEditorClass() 中,因为它返回 null。我假定支持原始类型及其包装器。不是吗?

最佳答案

我遇到了同样的问题。最简洁的方法可能是像 pritam 上面那样覆盖 getPropertyEditor 并为您的特定对象返回自定义 PropertyEditor。快速而肮脏的方法是以匿名类形式覆盖 convertValue,如下所示:

CsvToBean<MyClass> csvToBean = new CsvToBean<MyClass>(){

    @Override
    protected Object convertValue(String value, PropertyDescriptor prop) throws InstantiationException,IllegalAccessException {

        if (prop.getName().equals("myWhatever")) {
            // return an custom object based on the incoming value
            return new MyWhatever((String)value);
        }

        return super.convertValue(value, prop);
    }
};

这对我来说在 OpenCSV 2.3 上运行良好。祝你好运!

关于javabeans - 如何解析 Opencsv HeaderColumnNameMappingStrategy 中的非字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8317413/

相关文章:

java - 无法从 bean 中找到组件

xml - Eclipse Spring STS "Config Set"有什么用?

java - 从 WAR 中的其他 Maven 模块导入 Spring bean?

hadoop - HIVE - 逃避双引号问题

Java 如何向下载的 CSV 添加新的空列

java - OpenCSV 写入未转义的转义字符

java - CsvToBeanBuilder 无法将 CSV 数据转换为对象

java - Spring Webflow : How to pass a bean from a controller to a flow?(使用输入映射)

Java读取CSV文件,内容不写入新的CSV文件

java - 打开CSV将结果集导出为字符串类型