参数校验工具类validator

spring boot项目,所以直接引入web的starter的依赖即可。

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

常用的注解:

public class Car {
    @NotBlank // 不能为null,不能为空字符串
    private String manufacturer;
    @NotNull // 不能为null
    @Size(min = 2, max = 14) // 字符串长度位于2到14之间
    private String licensePlate;
    @Min(2)
    @Max(5) // 注意,未添加NotNull注解,所以seatCount可以为null,只有当seatCount不为null@Min @Max才会做校验
    private Integer seatCount;
    @AssertTrue // registered不为null时,则值需是true
    private Boolean registered;
    // groups用于指定所属的校验组
    @AssertTrue(message = "The car has to pass the vehicle inspection first", groups = CarChecks.class)
    private Boolean passedVehicleInspection;
    @Valid // 表明应对driver对象内字段继续做校验
    @NotNull
    private Driver driver;
    @Valid // 表明应对passengers里的Person对象内字段继续做校验
    @Size(max = 2) // 表明passengers最多只能有两个对象
    private List<Person> passengers = new ArrayList<>();
    private String brand;
    @Range(min = 2,max = 4) // 作用同@Min @Max
    private Integer doors;
    private CarTypeEnum carTypeEnum;
    // get set......
}

Validator接口有三个方法,可用于验证整个实体或仅验证实体的单个属性

Validator#validate() 验证所有bean的所有约束
Validator#validateProperty() 验证单个属性
Validator#validateValue() 检查给定类的单个属性是否可以成功验证

package util;

import util.bean.CommonResult;

import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import java.util.List;
import java.util.Set;

/**
 * @description: 参数校验工具类
 * @author: ShiHuaHao
 **/
public class ValidateUtil {

    private final static Validator validator = Validation.buildDefaultValidatorFactory().getValidator();

    /**
     * 参数校验
     *
     * @param date 参数对象(泛型里面的对象加@Valid才可校验)
     * @param var 分组
     * @return
     */
    public static CommonResult<String> paramValidate(Object date, Class<?>... var) {
        StringBuilder message = new StringBuilder();
        Set<ConstraintViolation<Object>> violations = validator.validate(date, var);
        for (ConstraintViolation<Object> violation : violations) {
            message.append("参数").append(violation.getPropertyPath().toString()).append("校验不通过,原因:").append(violation.getMessage()).append("。");
        }
        if (BeeStringUtil.isNotEmpty(message.toString())) {
            return CommonResult.failWithMessage(message.toString());
        }
        return CommonResult.success();
    }

    /**
     * 参数校验
     *
     * @param dates
     * @param var
     * @return
     */
    public static CommonResult<String> paramValidate4List(List<?> dates, Class<?>... var) {
        StringBuilder message = new StringBuilder();
        for (int i = 0; i < dates.size(); i++) {
            Object date = dates.get(i);
            Set<ConstraintViolation<Object>> violations = validator.validate(date, var);
            for (ConstraintViolation<Object> violation : violations) {
                message.append("第").append(i + 1).append("条数据的参数").append(violation.getPropertyPath().toString()).append("校验不通过,原因:").append(violation.getMessage()).append("。");
            }
        }
        if (BeeStringUtil.isNotEmpty(message.toString())) {
            return CommonResult.failWithMessage(message.toString());
        }
        return CommonResult.success();
    }

    //分组
    public interface Add {}
    public interface Update {}
    public interface Del {}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值