首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UniVocity如何向自定义Validator添加参数

UniVocity如何向自定义Validator添加参数
EN

Stack Overflow用户
提问于 2019-03-28 17:38:13
回答 1查看 388关注 0票数 2

我正在为univocity解析器创建一些自定义验证器,并希望添加如下参数:

代码语言:javascript
复制
   public class Size implements Validator<String>
   int max;

然后像这样使用它:

代码语言:javascript
复制
   @Parsed
   @Validate(nullable = false, validators = Size.class(8) )
   private String someString;

我没有找到这样的东西,也没有找到带有注释的例子。

也许使用javax.validation注解?

或者可能是注入使用范围限制构造函数创建的sizeValidation对象?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-04 01:31:19

这里有两种选择:

1-在setter上添加注释(简单但不可重用):

代码语言:javascript
复制
    @Parsed
    @Validate(nullable = false)
    public void setSomeString(String value){
        if(value.length() < 3 || value.length() > 5){
            throw new DataValidationException("SomeString can't have length " + value.length());
        }
        this.someString = value;
    }

2-扩展类ValidatedConversion并在@Convert注释中使用该类:

代码语言:javascript
复制
public class LengthValidator extends ValidatedConversion {

    private int min;
    private int max;

    public LengthValidator(String... args) {
        super(false, false); //not null / not blank
        this.min = Integer.parseInt(args[0]);
        this.max = Integer.parseInt(args[1]);
    }

    @Override
    protected void validate(Object value) {
        super.validate(value); //let super check for null and whatever you need.
        String string = value.toString();
        if(string.length() < min || string.length() > max){
            throw new com.univocity.parsers.common.DataValidationException("Value can't have length " + string.length());
        }
    }
}

然后将其添加到属性中:

代码语言:javascript
复制
    @Parsed
    @Convert(conversionClass = LengthValidator.class, args = {"3", "5"})
    private String someString;

希望这能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55403794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档