超级 CSV:寻找等于 LMinMax 的整数

Super CSV: Looking for integer equivalent to LMinMax

使用 supercsv,我可以使用 LMinMax() 将最小和最大约束应用于长列,但是如何对映射到整数的列执行此操作?如果我在映射到我的 bean 中的整数的列上使用 LMinMax,当我尝试读取文件时,我得到一个 org.supercsv.exception.SuperCsvReflectionException,因为它正在寻找一个 setter,它需要很长时间而不是一个整数。

唯一可行的单元处理器组合类似于

new LMinMax(0, 10, new FmtNumber("###", new ParseInt()))

太可怕了。

问题是 Super CSV 的 ReflectionUtils 只允许完全匹配类型(虽然支持自动装箱)。您可以在 Github 上提出功能请求以解决此问题。

您可以使用 CsvDozerBeanReader 来解决这个问题(Dozer 支持从 LongInteger 的映射非常愉快),或者您可以定义自己的自定义单元处理器,如下所示。

public class IntMinMax extends LMinMax {

    public IntMinMax(int min, int max) {
        super(min, max);
    }

    @Override
    public Object execute(Object value, CsvContext context) {
        Long result = (Long) super.execute(value, context);
        return result.intValue();
    }

}

这应该可行,但请注意,它不允许在它之后链接处理器(对 super.execute() 的调用重用了 min/max 验证,但也意味着您无法阻止它通过Long 到下一个处理器,所以我只是禁用了链接)。