模拟场景:按自己定义的顺序校验人的身份证,手机 ,邮箱,缺一个都是人员信息不完整
1-接口以及校验身份证,手机 ,邮箱的实现类
public interface ReviewHandler {
Result reviewer(UserInfo userInfo);
}
@Component("BASE")
public class BaseReviewHandler implements ReviewHandler {
/**
* <简述>校验身份证
* <详细描述>
* @author syf
* @date 2023/8/8 16:27
* @param userInfo
* @return com.ratelimiter.reviewHandlers.Result
*/
@Override
public Result reviewer(UserInfo userInfo) {
System.out.println("校验身份证------>>>");
int length = userInfo.getIdCard().split("\\s+").length;
if (length == 18){
return new Result("200", "success");
}else {
return new Result("500", "failed");
}
}
}
@Component("EMAIL")
public class EmailReviewHandler implements com.ratelimiter.reviewHandlers.ReviewHandler {
/**
* <简述>校验邮箱
* <详细描述>
* @author syf
* @date 2023/8/8 16:27
* @param userInfo
* @return com.ratelimiter.reviewHandlers.Result
*/
@Override
public Result reviewer(UserInfo userInfo) {
System.out.println("校验邮箱------>>>");
boolean contains = userInfo.getEmail().contains("@");
if (contains){
return new Result("200", "success");
}else {
return new Result("500", "failed");
}
}
}
@Component("PHONE")
public class MobileReviewHandler implements ReviewHandler {
/**
* <简述>校验手机号
* <详细描述>
* @author syf
* @date 2023/8/8 16:27
* @param userInfo
* @return com.ratelimiter.reviewHandlers.Result
*/
@Override
public Result reviewer(UserInfo userInfo) {
System.out.println("校验手机------>>>");
Pattern REGEX_MOBILE = Pattern.compile("^(1[3-9][0-9])\\d{8}$");
Matcher matcher = REGEX_MOBILE.matcher(userInfo.getPhone());
if (matcher.matches()){
return new Result("200", "success");
}else {
return new Result("500", "failed");
}
}
}
2-service层逻辑
根据传入的 "reviewers":"BASE,EMAIL,PHONE" 类型 拿到 (ReviewHandler) SpringUtils.getBean(beanName) 类
@Service
public class ReviewHandlerService {
/**
* <简述>
* <详细描述>
* {
* "idCard":"320882198903085627",
* "email":"133745454@qq.com",
* "phone":"13626187923",
* "reviewers":"BASE,EMAIL,PHONE"
* }
* @param userInfo
* @return com.ratelimiter.reviewHandlers.Result
* @author syf
* @date 2023/8/8 12:01
*/
public Result doSave(UserInfo userInfo) {
//拿到传入校验类型list
List<ReviewHandler> reviewHandlers = buildHandlers(userInfo);
Iterator<ReviewHandler> iterator = reviewHandlers.iterator();
//循环调用 reviewer 方法进行校验
Result result = null;
while (iterator.hasNext()) {
ReviewHandler n = iterator.next();
result = n.reviewer(userInfo);
}
//业务逻辑。。。。
return result;
}
/**
* <简述>将传入的类型转为ReviewHandler接口的list
* <详细描述>
* @param userInfo
* @return java.util.List<com.ratelimiter.reviewHandlers.ReviewHandler>
* @author syf
* @date 2023/8/8 11:56
*/
List<ReviewHandler> buildHandlers(UserInfo userInfo) {
String[] split = StringUtils.split(userInfo.getReviewers(), ",");
List<String> strings = Arrays.asList(split);
return strings.stream().map(beanName -> {
return (ReviewHandler) SpringUtils.getBean(beanName);
}).collect(Collectors.toList());
}
3-controler 编写 已经 测试结果展示
@RestController
public class ReviewController {
@Autowired
private ReviewHandlerService reviewHandlerService;
@PostMapping("/review")
public ResponseEntity<String> reviews(@RequestBody UserInfo userInfo) {
Result result = reviewHandlerService.doSave(userInfo);
if (!"200".equals(result.getCode())) {
return ResponseEntity.ok("人员身份信息不全,请重新填写");
}
return ResponseEntity.ok("人员身份信息正确");
}
}
入参展示
传入:"reviewers":"BASE,EMAIL,PHONE" 类型
后台打印
校验身份证------>>>
校验邮箱------>>>
校验手机------>>>
校验2:
传入:"reviewers":"BASE,PHONE" 去掉EMAIL邮箱校验
校验身份证------>>>
校验手机------>>>