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();