Java校验框架-Oval

介绍

文档:http://oval.sourceforge.net/userguide.html#dependencies
下载:https://sourceforge.net/projects/oval/
OVal is an extensible object validation framework for Java 5 or later. Annotations (@NotNull) or XML configuration files can be used to express class constraints. OVal can optionally use AspectJ to enforce automatic validation (DbC)

例子

代码

在这里插入图片描述

pom.xml

    <dependencies>
        <!-- OVAL验证框架 -->
        <dependency>
            <groupId>net.sf.oval</groupId>
            <artifactId>oval</artifactId>
            <version>1.87</version>
        </dependency>

        <!-- test -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!-- 日志 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.20</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.25</version>
        </dependency>
    </dependencies>
Student.java
package com.ydfind.verify.oval.model;

import com.ydfind.verify.oval.TypeCheck;
import lombok.Data;
import net.sf.oval.constraint.*;

@Data
public class Student {

    @NotNull(profiles = {"profile1"})
    @Length(min = 2, profiles = {"profile1"})
    private Integer id;

    @Length(max = 1, profiles = {"profile1"})
    private Integer age;

    @CheckWith(value = TypeCheck.class, message = "名称必须为张三")
    private String name;

    private String address;

    private String phone;

    @NotEmpty
    private String sex;

//    @NotNull
    @AssertValid// 递归校验,通常与notnull一起使用
    private ClassInfo classInfo;

    @Email(profiles = {"profile1"})
    private String email;

    @DateRange(format = "yyyy-MM-dd", message = "日期格式不正确")
    private String birthDay;
}

ClassInfo.java
package com.ydfind.verify.oval.model;

import lombok.Data;
import net.sf.oval.constraint.NotEmpty;

@Data
public class ClassInfo {

    @NotEmpty
    private String school;
}
TypeCheck.java
package com.ydfind.verify.oval;

import net.sf.oval.constraint.CheckWithCheck;

public class TypeCheck implements CheckWithCheck.SimpleCheck{
    @Override
    public boolean isSatisfied(Object o, Object o1) {
        if(o1 instanceof String && "张三".equals((String)o1)){
            return true;
        }
        return false;
    }
}

StudentVerifyTest.java
package com.ydfind.verify;

import com.ydfind.verify.oval.model.ClassInfo;
import com.ydfind.verify.oval.model.Student;
import lombok.extern.slf4j.Slf4j;
import net.sf.oval.ConstraintViolation;
import net.sf.oval.Validator;
import org.junit.Test;

import java.util.List;

@Slf4j
public class StudentVerifyTest {

    @Test
    public void testVerify() {
        Student student = new Student();
        Validator validator = new Validator();
        // 初始化为正确的校验参数
        student.setId(10);
        student.setAge(8);
        student.setName("张三");
        student.setAddress("北京市");
        student.setPhone("18765230986");
        student.setSex("男");
        student.setEmail("yd@ydfind.com");
        student.setBirthDay("1996-10-05");
        ClassInfo classInfo = new ClassInfo();
        classInfo.setSchool("北京外国语大学");
        student.setClassInfo(classInfo);

        verifyStudent(validator, student);
        // 设置错误的参数
        student.setId(1);
        student.setAge(18);
        student.setName("李四");
        student.setSex("");
        student.setEmail("www.ydfind.com");
        student.getClassInfo().setSchool("");
        student.setBirthDay("1996.10.05");

        verifyStudent(validator, student);

        // 设置错误的参数
        student.setClassInfo(null);
        validator.disableProfile("profile1");

        verifyStudent(validator, student);
    }

    /**
     * 对对象进行校验
     * @param validator
     * @param obj
     */
    private static void verifyStudent(Validator validator, Object obj){
        List<ConstraintViolation> violations = validator.validate(obj);

        if(violations.size() > 0){
            log.info("----------------------Object is invalid:------------------");
            for(ConstraintViolation violation: violations){
                log.error(violation.getMessage());
            }
        } else {
            log.info("----------------------Object is valid:-------------------");
        }
    }
}

运行测试类

在这里插入图片描述

其他使用

@Size(min = 1, message = "查询类型不能为空")
private List<String> list;
@ValidateWithMethod(methodName = "isValidDate", parameterType = String.class
private String date;

public boolean isValidDate(String date) {
        try {
            DateUtils.parseDate(date, "yyyy-MM-dd");
        } catch (ParseException e) {
            return false;
        }
        return true;
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值