我正在使用 HeaderColumnNameMappingStrategy 将带有标题的 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。我假设支持原始类型及其包装器。他们不是吗?