ValidatorUtils 工具类

15 阅读3分钟

依赖版本

    <groupId>jakarta.validation</groupId>  
    <artifactId>jakarta.validation-api</artifactId>  
    <version>2.0.2</version>  
</dependency>

ValidatorUtils工具类

package com.cogo.collect.utils;

import com.cogo.collect.remote.request.FunctionDispenseRequest;
import com.cogo.common.domain.ValidationResult;
import com.suixingpay.ace.common.collection.CollectionUtils;

import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import javax.validation.groups.Default;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Stream;

import static java.util.stream.Collectors.toList;

/**
 * @author 86156
 * @project cogo-collect
 * @date 2024-06-28
 * @desc
 */
public class ValidatorUtils {

    public static Validator getValidator() {
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        return factory.getValidator();
    }

    public static <T> ValidationResult validateEntity(T obj) {
        ValidationResult result = new ValidationResult();
        Set<ConstraintViolation<T>> set = getValidator().validate(obj, Default.class);
        if (CollectionUtils.isNotEmpty(set)) {
            result.setHasErrors(true);
            Map<String, String> errorMsg = new HashMap();
            for (ConstraintViolation<T> cv : set) {
                errorMsg.put(cv.getPropertyPath().toString(), cv.getMessage());
            }

            result.setErrorMsg(errorMsg);
        }
        return result;
    }

    public static <T> ValidationResult validateProperty(T obj, String propertyName) {
        ValidationResult result = new ValidationResult();
        Set<ConstraintViolation<T>> set = getValidator().validateProperty(obj, propertyName, Default.class);
        if (CollectionUtils.isNotEmpty(set)) {
            result.setHasErrors(true);
            Map<String, String> errorMsg = new HashMap();
            for (ConstraintViolation<T> tConstraintViolation : set) {
                errorMsg.put(propertyName, tConstraintViolation.getMessage());
            }

            result.setErrorMsg(errorMsg);
        }

        return result;
    }


    public static void main(String[] args) {
        FunctionDispenseRequest request = new FunctionDispenseRequest();
        request.setMasterId("20230404153303028327230996");
        request.setSubId("20230303172144027488540977");
        List<String> list =
                Stream.of("E2024062500001444634286",
                        "E2024062500001443882585",
                        "E2024062500001436133062",
                        "E2024062500001435651207",
                        "E2024062500001434038301",
                        "E2024062500001433783892",
                        "E2024062500001432477406",
                        "E2024062500001431522508")
                        .collect(toList());
        request.setOrderIds(list);
        request.setBusinessType("1");
        request.setOperType("2");
        request.setJhMno("M001200000002129");
        //验证bean
        ValidationResult validationResult = ValidatorUtils.validateEntity(request);
        //验证bean的某个属性
        ValidationResult validationResult1 = ValidatorUtils.validateProperty(request, "jhMno");
    }
}

Bean对象


import java.util.Map;

public class ValidationResult {
    private boolean hasErrors;
    private Map<String, String> errorMsg;

    public ValidationResult() {
    }

    public boolean isHasErrors() {
        return this.hasErrors;
    }

    public void setHasErrors(boolean hasErrors) {
        this.hasErrors = hasErrors;
    }

    public Map<String, String> getErrorMsg() {
        return this.errorMsg;
    }

    public void setErrorMsg(Map<String, String> errorMsg) {
        this.errorMsg = errorMsg;
    }

    public String toString() {
        return "ValidationResult [hasErrors=" + this.hasErrors + ", errorMsg=" + this.errorMsg + "]";
    }
}

package com.cogo.collect.remote.request;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.util.Date;
import java.util.List;

/**
 * @author 86156
 * @project cogo-collect
 * @date 2024-06-26
 * @desc
 */
@Data
public class FunctionDispenseRequest {

    @NotNull(message = "主账号id不能为空")
    @ApiModelProperty("主账号id")
    private String masterId;

    @NotNull(message = "子账号id不能为空")
    @ApiModelProperty("子账号id")
    private String subId;

    @NotEmpty(message = "业务唯一订单号不允许为空")
    @ApiModelProperty("业务唯一订单号")
    private List<String> orderIds;

    @Pattern(regexp = "1|2", message = "业务类型不合法-1、外贸收款分配,2、外贸收款订单分配")
    @NotNull(message = "业务类型不能为空")
    @ApiModelProperty("业务类型 1、外贸收款分配,2、外贸收款订单分配")
    private String businessType;

    @Pattern(regexp = "1|2", message = "操作类型不合法-1、分配,2、取消分配")
    @NotNull(message = "操作类型不能为空")
    @ApiModelProperty("操作类型 1、分配,2、取消分配")
    private String operType;

    @NotNull(message = "M商编不能为空")
    @ApiModelProperty("M商编")
    private String jhMno;

    @ApiModelProperty("操作时间")
    private Date operTime;

    @ApiModelProperty(value = "消息流水号")
    private String reqNo;
}

自定义注解


package com.cogo.collect.config;



import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author 86156
 * @project cogo-collect
 * @date 2024-06-28
 * @desc
 */
@Documented
@Retention(RetentionPolicy.CLASS)
@Target({ElementType.PARAMETER,ElementType.FIELD})
@Constraint(validatedBy={IdCodeValidator.class})
public @interface IdCode {

    String message() default "请填写正确的身份证信息";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};

}
package com.cogo.collect.config;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

/**
 * @author 86156
 * @project cogo-collect
 * @date 2024-06-28
 * @desc
 */
public class IdCodeValidator implements ConstraintValidator<IdCode, Object> {

    @Override
    public void initialize(IdCode constraintAnnotation) {
        ConstraintValidator.super.initialize(constraintAnnotation);
    }

    @Override
    public boolean isValid(Object value, ConstraintValidatorContext context) {
        return false;
    }
}