java bean 校驗工具

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>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章