package cn.com.sand.scspcommon.common.util;
import io.vavr.Tuple;
import io.vavr.Tuple2;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import java.util.Optional;
import java.util.Set;
/**
* 利用{@link Validation}校驗bean對象參數的正確性
*
* @author zhu.tq
*/
public class BeanValidateUtils {
/**
* 校驗對象,通過返回(true, null),校驗失敗返回(false, errorMessage)
*/
public static Tuple2<Boolean, String> validate(Object o) {
Optional<ConstraintViolation<Object>> optional = findAnyConstraintViolation(o);
return optional
.map(objectConstraintViolation -> Tuple.of(false, objectConstraintViolation.getMessage()))
.orElseGet(() -> Tuple.of(true, null));
}
public static <T> Optional<ConstraintViolation<T>> findAnyConstraintViolation(T t) {
return findAllConstraintViolation(t).stream().findAny();
}
public static <T> Set<ConstraintViolation<T>> findAllConstraintViolation(T t) {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
return validator.validate(t);
}
}
package cn.com.sand.clearcenter.service.clear.validate;
import cn.com.sand.scspcommon.common.frame.service.AbstractValidateService;
import cn.com.sand.scspcommon.common.util.BeanValidateUtils;
import io.vavr.Tuple2;
import org.springframework.stereotype.Service;
/**
* Function: 交易結果通知校驗. <br/>
*
*/
@Service
public class ValidateService extends AbstractValidateService<Object, Tuple2<Boolean, String>> {
@Override
public Tuple2<Boolean, String> validate(Object object) {
return BeanValidateUtils.validate(object);
}
}
public boolean isLegal(BaseValidateBean validateBean, MerchantClearBean merchantClearBean) {
//參數校驗
Tuple2<Boolean, String> tuple2 = validateService.validate(validateBean);
if (!tuple2._1) {
HelperRespBeanWrapper.wrapper(merchantClearBean, RespStatus.FAILED, ErrorCode.REQUEST_PARAM_ILLEGAL, tuple2._2);
SYSLOGGER.error(LogType.COMM, "參數校驗不通過:{}", tuple2._2);
return Boolean.FALSE.booleanValue();
}
return Boolean.TRUE.booleanValue();
}
package cn.com.sand.clearcenter.service.clear.validate.req;
import java.math.BigDecimal;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import lombok.Builder;
import lombok.Data;
/**
* 收款bean校驗
* @author 劉趙強 by 2019年11月25日10:08:49
*/
@Data
@Builder
public class OnlineDbConfirmNoticeValidateBean implements BaseValidateBean {
@NotBlank(message = "version 不能爲空")
private String version;
@NotBlank(message = "accessSystemNo 不能爲空")
@Size(min = 4, max = 4, message = "accessSystemNo 長度需爲4位")
private String accessSystemNo;
@NotBlank(message = "accessSerialNo 不能爲空")
@Size(max = 50, message = "accessSerialNo 長度不能超過50位")
private String accessSerialNo;
@NotBlank(message = "scspTransType 不能爲空")
@Size(min = 6, max = 6, message = "scspTransType 長度需爲6位")
private String scspTransType;
@NotBlank(message = "transSerialNo 不能爲空")
@Size(max = 50, message = "transSerialNo 長度不能超過50位")
private String transSerialNo;
@NotBlank(message = "customerOrderNo 不能爲空")
@Size(max = 50, message = "customerOrderNo 長度不能超過50位")
private String customerOrderNo;
@NotBlank(message = "origCustomerOrderNo 不能爲空")
@Size(max = 50, message = "origCustomerOrderNo 長度不能超過50位")
private String origCustomerOrderNo;
@NotBlank(message = "marketProductNo 不能爲空")
@Size(min = 6, max = 6, message = "marketProductNo 長度需爲6位")
private String marketProductNo;
@NotBlank(message = "funcProductNo 不能爲空")
@Size(min = 8, max = 8, message = "funcProductNo 長度需爲8位")
private String funcProductNo;
@NotBlank(message = "customerNo 不能爲空")
private String customerNo;
@NotBlank(message = "accessMid 不能爲空")
private String accessMid;
private String accessTid;
@NotBlank(message = "workDate 不能爲空")
@Size(min = 8, max = 8, message = "workDate 長度需爲8位")
private String workDate;
@NotBlank(message = "orderDate 不能爲空")
@Size(min = 8, max = 8, message = "orderDate 長度需爲8位")
private String orderDate;
@NotBlank(message = "orderCreateTime 不能爲空")
@Size(min = 14, max = 14, message = "orderCreateTime 長度需爲14位")
private String orderCreateTime;
@NotNull(message = "confirmAmt 不能爲空")
@DecimalMin(value = "0",message = "confirmAmt必須大於等於0")
private BigDecimal confirmAmt;
}
POM文件
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.14.Final</version>
</dependency>