Validator校验器

1.逻辑验证工具构建

public class ValidatorBuilderFactory {

	public ValidatorBinder create() {
		return create(null);
	}

	public ValidatorBinder create(Object target) {
		return new ValidatorBinder(target);
	}

}

2.validator分步构建工具

public class ValidatorBinder extends DataBinder {


    static Logger logger = LoggerFactory.getLogger(ValidatorBinder.class);

    /**
     * 创建构建工具 需要指定验证对象
     *
     * @param target
     */
    public ValidatorBinder(Object target) {
        super(target);
    }

    /**
     * 验证 获取验证结果
     *
     * @return
     */
    @Override
    public void validate() {

		BindingResult bindingResult = getBindingResult();

		for (Validator validator : super.getValidators()) {
            validator.validate(getTarget(), bindingResult);
        }

        // 判断api请求字段业务验证,有错误抛出
        if (bindingResult.hasErrors()) {

            logger.warn("Validate error:{} ", super.getBindingResult().getAllErrors());

            throw new RequestParamNotValidException(super.getBindingResult());
        }
    }

    /**
     * 添加验证器
     *
     * @param validators
     * @return
     */
    public DataBinder addMoreValidators(Validator... validators) {
        super.addValidators(validators);
        return this;
    }

3.获取会员卡context信息

public  class ContextFactory{

public CardContext getCardContext(String cardId) {

		// 会员卡信息Supplier
		Supplier<CardEntity> cardSupplier = () -> {
			return cardService.queryCardByCardId(cardId);
		};

		return new CardContext(cardSupplier);
	}

4.

public class CardContext {

	// 会员卡
	private Supplier<CardEntity> cardSupplier;
	private Optional<CardEntity> card;

	public CardContext(Supplier<CardEntity> cardSupplier) {
		this.cardSupplier = cardSupplier;
	}

	public CardEntity getCard() {

		if (Objects.nonNull(card)) {
			return card.orElse(null);
		}

		card = Optional.ofNullable(cardSupplier.get());

		return card.orElse(null);
	}

}

5.检验会员卡是否存在

public class CardExistValidator implements Validator {

	private CardContext cardContext;

	public CardExistValidator(CardContext cardContext) {
		this.cardContext = cardContext;
	}

	@Override
	public boolean supports(Class<?> clazz) {

		return true;
	}

	@Override
	public void validate(Object target, Errors errors) {

		if (errors.hasErrors()) {
			return;
		}

		if (Objects.isNull(cardContext)
				|| Objects.isNull(cardContext.getCard())) {

			errors.reject(ApiErrorCode.CODE_5002);
		}

	}
}

6.

CardContext cardContext = contextFactory
				.getCardContext(request.getCardId());

		// 会员卡
		CardEntity card = cardContext.getCard();

		validatorBuilderFactory.create(request).addMoreValidators(
				// 会员卡存在校验
				new CardExistValidator(cardContext)).validate();
发布了254 篇原创文章 · 获赞 18 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_36594703/article/details/89086726