【问题标题】:OpenCsv - set custom validation on fieldOpenCsv - 在字段上设置自定义验证
【发布时间】:2019-09-24 21:08:35
【问题描述】:

我正在使用 OpenCsv 将 csv 文件转换为 Java Bean。

我的文件如下所示:

USER_NAME, USER_ID, FREQUENCY
aaa,111,DAILY
bbb,222,WEEKLY,
ccc,333,MONTHLY
ddd,444,SOME_RANDOM_VALUE
eee,555,YEARLY

我需要对列执行以下验证:

USER_NAME -> not null, alphabets only
USER_ID -> not null, digits only
FREQUENCY -> not null, allowed values - DAILY, WEEKLY, MONTHLY, YEARLY

对于 FREQUENCY 的任何其他值,记录 USER_NAME 列,如下所示: dddd,频率

我只需要记录该行并像往常一样继续流程,即“eeee”应该映射到 java bean。

基于Opencsv custom logic in parcing,我在java bean中创建了如下逻辑。

问题在于,流因“dddd”而停止,而“eeee”未映射。

class UserBean {

    private String userName;
    private String userID;
    private String frequency;

    //Getters and Setters for userName, userID
    public void setFrequency(String frequency) {
        if(frequency.isEmpty() && !(frequency.equalsIgnoreCase("DAILY") && frequency.equalsIgnoreCase("WEEKLY") && frequency.equalsIgnoreCase("MONTHLY") && frequency.equalsIgnoreCase("YEARLY"))) {
            throw new IllegalArgumentException("Invalid value for FREQUENCY"); 
        }
    }
}

public static void main() {

            CsvToBean<UserBean> csvToBean = new CsvToBean<UserBean>();
            Reader reader = new FileReader((File) INPUT_DIR);
            csvToBean = new CsvToBeanBuilder(reader).withSeparator(',')
                    .withType(User.class)
                    .withOrderedResults(true)
                    .withIgnoreLeadingWhiteSpace(true)
                    .build();
            Iterator<PrimeAOBean> csvUserIterator = csvToBean.iterator();

            List<Exception> exceptionList = new ArrayList<Exception>();

            while (csvUserIterator.hasNext()) {
                try {
                UserBean userBean = csvUserIterator.next();
                userDataMap.put(userBean.getUserID(), userBean);
                }
                catch(Exception e) {
                    exceptionList.add(e);
                    continue;
                }
                finally {
                    FileWriter fileWriter = new FileWriter(ERROR_DIR);
                    PrintWriter printWriter = new PrintWriter(fileWriter);
                    for (Exception excep: exceptionList) {
                        printWriter.print(excep.getLocalizedMessage());
                        printWriter.close();
                    }
                    continue;
                }
            }               
                }

【问题讨论】:

  • 您不是在寻找 BeanVerifier 吗?但是我找不到任何关于如何使用它的例子。

标签: java opencsv


【解决方案1】:

您可以添加 .withThrowExceptions(false) 以忽略运行时异常,如 here 所述

【讨论】:

    猜你喜欢
    • 2014-09-27
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    相关资源
    最近更新 更多