java 对象校验工具类

这篇博客通过示例介绍了Java中用于对象校验的工具类,包括如何进行级联验证,并展示了在验证失败时的控制台异常输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

示例说明
这里定义两个类,Driver和DriverLicense类,其中后者引用Driver类,从而用于演示级联验证。

Driver类

import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past;
import java.util.Date;

public class Driver {
    @NotNull
    private String fullName;
    @Min(100)
    private int height;
    @Past
    @NotNull
    private Date dateOfBirth;

    public Driver(String fullName, int height, Date dateOfBirth) {
        this.dateOfBirth = dateOfBirth;
        this.fullName = fullName;
        this.height = height;
    }
}

DriverLicense类

import javax.validation.Valid;
import javax.validation.constraints.Digits;
import javax.validation.constraints.NotNull;

public class DriverLicense {
    @NotNull
    @Valid  //不加级联类中无法验证
    private Driver driver;
    @Digits(integer = 7, fraction = 0)
    private int number;

    public DriverLicense(Driver driver, int number) {
        this.driver = driver;
        this.number = number;
    }
}

演示验证类

import com.dataz.entity.Driver;
import com.dataz.entity.DriverLicense;

import javax.validation.*;
import java.text.ParseException;
import java.util.Date;
import java.util.Set;

public class ValidAnnotationDemo5 {
    public static void main(String[] args) throws ParseException {
        Driver driver = new Driver("Joseph Waters", 60,
                new Date(System.currentTimeMillis() + 100000));
        DriverLicense dl = new DriverLicense(driver, 345443183);

        Set<ConstraintViolation<DriverLicense>> violations = validator.validate(dl);
        validate(dl);
    }

    private static void printError(ConstraintViolation<?> violation) {
        System.out.println(violation.getPropertyPath() + " " + violation.getMessage());
    }
    public static void validate(Object object){
        Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
        Set<ConstraintViolation<Object>> violations = validator.validate(object);
         if (violations.size() == 0) {
            System.out.println("No violations.");
        } else {
        	for (ConstraintViolation<Object> violation : violations) {
        		printError(violation);
        	}
        	/*//简写
            System.out.printf("%s violations:%n", violations.size());
            violations.stream().forEach(ValidAnnotationDemo5::printError);*/
        } 
     }       
}

控制台输出异常

number 数字的值超出了允许范围(只允许在7位整数和0位小数范围内)
driver.dateOfBirth 需要是一个过去的时间
driver.height 最小不能小于100
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值