Compare commits

..

No commits in common. "49f2c437f5aee8e226dc049a7c659d966257c369" and "c1a7bafaf6ae44e19ac004f1a8f339f74c860ae0" have entirely different histories.

1 changed files with 54 additions and 56 deletions

View File

@ -21,68 +21,66 @@ import xyz.zhouxy.plusone.validator.map.MapValidator;
public //
class MapValidatorTests {
private static final MapValidator<String, Object> validator = ParamsValidator.INSTANCE;
private static final String USERNAME = "username";
private static final String ACCOUNT = "account";
private static final String PASSWORD = "password";
private static final String PASSWORD2 = "password2";
private static final String AGE = "age";
private static final String BOOLEAN = "boolean";
private static final String ROLE_LIST = "roleList";
private static final MapValidator<String, Object> validator = new MapValidator<String, Object>(
new String[] { USERNAME, ACCOUNT, PASSWORD, AGE, BOOLEAN, ROLE_LIST }) {
{
checkValue(USERNAME, String.class).withRule(
PredicateTools.from(StringUtils::isNotBlank)
.and(username -> RegexTools.matches(username, PatternConsts.USERNAME)),
username -> new IllegalArgumentException(String.format("用户名【%s】不符合规范", username)));
checkValue(ACCOUNT, String.class).withRule(
PredicateTools.from(StringUtils::isNotBlank)
.and(account -> RegexTools.matchesOne(account,
new Pattern[] { PatternConsts.EMAIL, PatternConsts.MOBILE_PHONE })),
"请输入正确的邮箱地址或手机号");
checkValue(PASSWORD, String.class)
.withRule(StringUtils::isNotEmpty, "密码不能为空")
.withRule(pwd -> RegexTools.matches(pwd, PatternConsts.PASSWORD), "密码不符合规范");
// 校验到多个属性,只能针对 map 本身进行校验
withRule(m -> Objects.equals(m.get(PASSWORD), m.get(PASSWORD2)),
"两次输入的密码不一样!");
// 通过泛型方式调用方法,指定数据类型
this.<Integer>checkValue(AGE)
.withRule(Objects::nonNull)
.withRule(age -> (18 <= age && 60 >= age));
checkValue(BOOLEAN, Boolean.class)
.withRule(Objects::nonNull, "Boolean property could not be null.")
.withRule(b -> b, "Boolean property must be true.");
this.<Collection<String>>checkValue(ROLE_LIST)
.withRule(CollectionTools::isNotEmpty, "角色列表不能为空!")
.withRule(l -> l.stream().allMatch(StringUtils::isNotBlank),
() -> new IllegalArgumentException("角色标识不能为空!"));
}
};
@Test
void testValidateAndCopy() {
Map<String, Object> params = new HashMap<>();
params.put(ParamsValidator.USERNAME, "ZhouXY");
params.put(ParamsValidator.ACCOUNT, "zhouxy@code108.cn");
params.put(ParamsValidator.PASSWORD, "99Code108");
params.put(ParamsValidator.PASSWORD2, "99Code108");
params.put(ParamsValidator.AGE, 18);
params.put(ParamsValidator.BOOLEAN, true);
params.put(ParamsValidator.ROLE_LIST, Arrays.asList("admin", ""));
params.put("username", "ZhouXY");
params.put("account", "zhouxy@code108.cn");
params.put("password", "99Code108");
params.put("password2", "99Code108");
params.put("age", 18);
params.put("boolean", true);
params.put("roleList", Arrays.asList("admin", ""));
Map<String, Object> validedParams = validator.validateAndCopy(params);
System.out.println(validedParams);
}
}
class ParamsValidator extends MapValidator<String, Object> {
public static final String USERNAME = "username";
public static final String ACCOUNT = "account";
public static final String PASSWORD = "password";
public static final String PASSWORD2 = "password2";
public static final String AGE = "age";
public static final String BOOLEAN = "boolean";
public static final String ROLE_LIST = "roleList";
public static final ParamsValidator INSTANCE = new ParamsValidator();
private ParamsValidator() {
super(new String[] { USERNAME, ACCOUNT, PASSWORD, AGE, BOOLEAN, ROLE_LIST });
checkValue(USERNAME, String.class).withRule(
PredicateTools.from(StringUtils::isNotBlank)
.and(username -> RegexTools.matches(username, PatternConsts.USERNAME)),
username -> new IllegalArgumentException(String.format("用户名【%s】不符合规范", username)));
checkValue(ACCOUNT, String.class).withRule(
PredicateTools.from(StringUtils::isNotBlank)
.and(account -> RegexTools.matchesOne(account,
new Pattern[] { PatternConsts.EMAIL, PatternConsts.MOBILE_PHONE })),
"请输入正确的邮箱地址或手机号");
checkValue(PASSWORD, String.class)
.withRule(StringUtils::isNotEmpty, "密码不能为空")
.withRule(pwd -> RegexTools.matches(pwd, PatternConsts.PASSWORD), "密码不符合规范");
// 校验到多个属性,只能针对 map 本身进行校验
withRule(m -> Objects.equals(m.get(PASSWORD), m.get(PASSWORD2)),
"两次输入的密码不一样!");
// 通过泛型方式调用方法,指定数据类型
this.<Integer>checkValue(AGE)
.withRule(Objects::nonNull)
.withRule(age -> (18 <= age && 60 >= age));
checkValue(BOOLEAN, Boolean.class)
.withRule(Objects::nonNull, "Boolean property could not be null.")
.withRule(b -> b, "Boolean property must be true.");
this.<Collection<String>>checkValue(ROLE_LIST)
.withRule(CollectionTools::isNotEmpty, "角色列表不能为空!")
.withRule(l -> l.stream().allMatch(StringUtils::isNotBlank),
() -> new IllegalArgumentException("角色标识不能为空!"));
}
}