依赖版本
<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;
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");
ValidationResult validationResult = ValidatorUtils.validateEntity(request);
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;
@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;
@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;
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;
}
}