使用OpenCSV 4.1导出Bean列表为CSV时遇CsvBeanIntrospectionException异常
解决OpenCSV写入Bean列表时的CsvBeanIntrospectionException问题
我一眼就看出问题所在了——你的TestObject类里的属性命名和getter/setter方法不匹配,导致OpenCSV在反射寻找属性对应的访问器时失败了。
问题根源
OpenCSV的StatefulBeanToCsv在处理@CsvBindByName注解时,默认会严格遵循JavaBean规范去匹配属性与访问器:
- 对于属性
fieldx,它会尝试寻找getFieldx()和setFieldx()方法 - 但你的类里给
fieldx配置的是getX()和setX(),完全不符合匹配规则,所以抛出了NoSuchMethodException,进而触发CsvBeanIntrospectionException
至于你之前用Reader组件能成功读取,大概率是因为读取时CSV的列名是x和y,CsvToBean会自动匹配到setX()/setY()方法,刚好避开了这个命名冲突。
解决方案(两种可选)
方案1:修改getter/setter,遵循JavaBean规范
把属性对应的getter/setter名称改成和属性名一致的形式,严格贴合JavaBean命名规则:
import com.opencsv.bean.CsvBindByName; import java.io.Serializable; public class TestObject implements Serializable { @CsvBindByName int fieldx; @CsvBindByName int fieldy; public TestObject() { } public TestObject(int x, int y) { this.fieldx = x; this.fieldy = y; } // 改为和属性名对应的getter/setter public int getFieldx() { return fieldx; } public void setFieldx(int fieldx) { this.fieldx = fieldx; } public int getFieldy() { return fieldy; } public void setFieldy(int fieldy) { this.fieldy = fieldy; } @Override public String toString(){ return "{" + fieldx + "," + fieldy + "}"; } }
方案2:在@CsvBindByName注解中指定访问器
如果你不想修改现有的getter/setter,可以直接在注解里显式指定对应的getter方法,告诉OpenCSV该用哪个方法获取属性值:
import com.opencsv.bean.CsvBindByName; import java.io.Serializable; public class TestObject implements Serializable { // 通过accessor指定对应的getter方法名 @CsvBindByName(column = "fieldx", accessor = "getX") int fieldx; @CsvBindByName(column = "fieldy", accessor = "getY") int fieldy; public TestObject() { } public TestObject(int x, int y) { this.fieldx = x; this.fieldy = y; } public int getX() { return fieldx; } public int getY() { return fieldy; } public void setX(int x) { this.fieldx = x; } public void setY(int y) { this.fieldy = y; } @Override public String toString(){ return "{" + fieldx + "," + fieldy + "}"; } }
验证修改效果
无论选择哪种方案,修改后重新运行你的Project类,应该就能成功把TestObject列表写入到testfile.csv中了,生成的CSV会包含fieldx和fieldy两列,对应的值分别为1、3和2、4。
内容的提问来源于stack exchange,提问作者rothbart
相关产品推荐
相关产品推荐

