栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用SuperCSV一次验证每个字段

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用SuperCSV一次验证每个字段

我建议编写一个自定义CellProcessor来实现此目的。可以在每个CellProcessor链的开始处放置以下处理器-
它仅将委派给其后链接的处理器,并抑制任何单元处理异常。

package example;import java.util.ArrayList;import java.util.List;import org.supercsv.cellprocessor.CellProcessorAdaptor;import org.supercsv.cellprocessor.ift.CellProcessor;import org.supercsv.exception.SuperCsvCellProcessorException;import org.supercsv.util.CsvContext;public class SuppressException extends CellProcessorAdaptor {    public static List<SuperCsvCellProcessorException> SUPPRESSED_EXCEPTIONS =  new ArrayList<SuperCsvCellProcessorException>();    public SuppressException(CellProcessor next) {        super(next);    }    public Object execute(Object value, CsvContext context) {        try { // attempt to execute the next processor return next.execute(value, context);        } catch (SuperCsvCellProcessorException e) { // save the exception SUPPRESSED_EXCEPTIONS.add(e); // and suppress it (null is written as "") return null;        }    }}

它在起作用:

package example;import java.io.StringWriter;import java.util.Arrays;import java.util.List;import org.supercsv.cellprocessor.constraint.NotNull;import org.supercsv.cellprocessor.constraint.StrMinMax;import org.supercsv.cellprocessor.ift.CellProcessor;import org.supercsv.exception.SuperCsvCellProcessorException;import org.supercsv.io.CsvBeanWriter;import org.supercsv.io.ICsvBeanWriter;import org.supercsv.prefs.CsvPreference;public class TestSuppressExceptions {    private static final CellProcessor[] PROCESSORS = { new SuppressException(new StrMinMax(0, 4)), new SuppressException(new NotNull()) };    private static final String[] HEADER = { "name", "age" };    public static void main(String[] args) throws Exception {        final StringWriter stringWriter = new StringWriter();        ICsvBeanWriter beanWriter = null;        try { beanWriter = new CsvBeanWriter(stringWriter,         CsvPreference.STANDARD_PREFERENCE); beanWriter.writeHeader(HEADER); // set up the data Person valid = new Person("Rick", 43); Person nullAge = new Person("Lori", null); Person totallyInvalid = new Person("Shane", null); Person valid2 = new Person("Carl", 12); List<Person> people = Arrays.asList(valid, nullAge, totallyInvalid,         valid2); for (Person person : people) {     beanWriter.write(person, HEADER, PROCESSORS);     if (!SuppressException.SUPPRESSED_EXCEPTIONS.isEmpty()) {         System.out.println("Suppressed exceptions for row "       + beanWriter.getRowNumber() + ":");         for (SuperCsvCellProcessorException e :       SuppressException.SUPPRESSED_EXCEPTIONS) {  System.out.println(e);         }         // clear ready for next row         SuppressException.SUPPRESSED_EXCEPTIONS.clear();     } }        } finally { beanWriter.close();        }        // CSV will have empty columns for invalid data        System.out.println(stringWriter);    }}

这是抑制的异常输出(第4行有两个异常,每列一个):

Suppressed exceptions for row 3:org.supercsv.exception.SuperCsvConstraintViolationException: null value encountered processor=org.supercsv.cellprocessor.constraint.NotNullcontext={lineNo=3, rowNo=3, columnNo=2, rowSource=[Lori, null]}Suppressed exceptions for row 4:org.supercsv.exception.SuperCsvConstraintViolationException: the length (5) of value 'Shane' does not lie between the min (0) and max (4) values (inclusive)processor=org.supercsv.cellprocessor.constraint.StrMinMaxcontext={lineNo=4, rowNo=4, columnNo=2, rowSource=[Shane, null]}org.supercsv.exception.SuperCsvConstraintViolationException: null value encountered processor=org.supercsv.cellprocessor.constraint.NotNullcontext={lineNo=4, rowNo=4, columnNo=2, rowSource=[Shane, null]}

和CSV输出

name,ageRick,43Lori,,Carl,12

请注意无效值是如何写入的,

""
因为
SuppressException
处理器会
null
为这些值返回(不是因为您无效,所以您还是要使用CSV输出!)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/507720.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号