我的OpenCSV版本是: 5.5.2
我上传一个CSV文件并调用parseCSVFile方法,如下所示
List<CSVCouponData> csvData = CSVFileHelper.parseCSVFile(multipartFile.getInputStream());
以下是我的代码
public static List<CSVCouponData> parseCSVFile(InputStream inputStream) throws IOException {
CSVReader reader = null;
List<CSVCouponData> rec = null;
try {
reader = new CSVReader(new InputStreamReader(inputStream));
HeaderColumnNameMappingStrategy<CSVCouponData> beanStrategy = new HeaderColumnNameMappingStrategy<>();
beanStrategy.setType(CSVCouponData.class);
CsvToBean<CSVCouponData> csvToBean = new CsvToBean<>();
csvToBean.setCsvReader(reader);
csvToBean.setMappingStrategy(beanStrategy);
csvToBean.setIgnoreEmptyLines(true);
rec = csvToBean.parse();
} finally {
if(reader != null)
reader.close();
}
return rec;
}
以下是我的CSVCouponData
public class CSVCouponData {
@CsvBindByName(column = "name", required = true)
private String name;
@CsvBindByName(column = "coupon-type", required = true)
private String couponType;
@CsvBindByName(column = "incentive-program-id", required = true)
private String programId;
@CsvBindByName(column = "coupons-amount")
private Long couponsAmount;
@CsvBindByName(column = "coupon-benefits.unit-of-measure")
private String unitOfMeasure;
@CsvBindByName(column = "coupon-benefits.benefit-target-party")
private String benefitTargetParty;
@CsvBindByName(column = "coupon-benefits.characteristics")
private String characteristics;
@CsvBindByName(column = "coupon-benefits.benefit-type")
private String benefitType;
@CsvBindByName(column = "coupon-benefits.benefit-confirmation-source")
private String benefitConfirmationSource;
@CsvBindByName(column = "coupon-benefits.benefit-currency")
private String benefitCurrency;
@CsvBindByName(column = "coupon-benefits.benefit-amount")
private String benefitAmount;
@CsvBindByName(column = "coupon-benefits.benefit-description", required = true)
private String benefitDescription;
@CsvBindByName(column = "benefit-catalog-info.product-offering-ids")
private String productOfferingIds;
@CsvBindByName(column = "benefit-catalog-info.discount-id")
private String discountId;
@CsvBindByName(column = "benefit-catalog-info.cardinality.min")
private Integer cardinalityMin;
@CsvBindByName(column = "benefit-catalog-info.cardinality.max")
private Integer cardinalityMax;
@CsvBindByName(column = "external-id", required = true)
private String externalId;
@CsvBindByName(column = "valid_from", required = true)
private String validFrom;
@CsvBindByName(column = "valid_to", required = true)
private String validTo;
@CsvBindByName(column = "sales_context.batch-id")
private String batchId;
@CsvBindByName(column = "sales_context.campaign-id")
private String campaignId;
@CsvBindByName(column = "sales_context.chain-id")
private String chainId;
@CsvBindByName(column = "sales_context.channel")
private String channel;
@CsvBindByName(column = "sales_context.dealer-id")
private String dealerId;
@CsvBindByName(column = "sales_context.sales-type")
private String salesType;
@CsvBindByName(column = "sales_context.salesperson-id")
private String salesPersonId;
@CsvBindByName(column = "incentive-coupon-batches.partner-name", required = true)
private String partnerName;
@CsvBindByName(column = "incentive-coupon-batches.redemption-specification-owner", required = true)
private String redemptionSpecificationOwner;
@CsvBindByName(column = "incentive-coupon-batches.distribution-specification.owner", required = true)
private String distributionSpecificationOwner;
@CsvBindByName(column = "incentive-coupon-batches.distribution-specification.method", required = true)
private String distributionSpecificationMethod;
@CsvBindByName(column = "incentive-coupons.code", required = true)
private String code;
@CsvBindByName(column = "brand")
private String brand;
当我调试我的代码时,它会在以下一行抛出错误: rec = csvToBean.parse();使用此错误
java.lang.RuntimeException: Error capturing CSV header!
即使在我的CsvCouponData中提供了所有标记为required =true的字段,但我还是看到了这个错误
com.opencsv.exceptions.CsvRequiredFieldEmptyException: Header is missing required fields [INCENTIVE-PROGRAM-ID]. The list of headers encountered is [ incentive-program-id,coupon-type,name,coupon-benefits.benefit-description,external-id,valid_from,valid_to,incentive-coupon-batches.partner-name,incentive-coupon-batches.redemption-specification-owner,incentive-coupon-batches.distribution-specification.owner,incentive-coupon-batches.distribution-specification.method,incentive-coupons.code].
最初,我使用了opencsv版本4.4,并且没有这个错误。
但是当我将版本升级到5.5.2时,我开始看到这个错误。我也升级到了最新版本的5.6,但仍然没有运气。
我已经通过了这个链接,这与我所得到的错误几乎相似,但是没有任何解决方案能帮助我。
发布于 2022-06-08 06:31:34
我已经解决了这个问题。问题不在于代码,而是文件格式。我们上传的csv文件是用以下格式.csv(utf-8)保存的。然后将文件格式更改为.csv解决了这个问题。
https://stackoverflow.com/questions/72490416
复制相似问题