feat(validator): 添加 notEqual
校验方法并优化 equalTo
- 新增 `notEqual` 校验方法,用于判断属性值不等于给定值。 - 优化 `equalTo` 方法的空值判断逻辑,当属性值为空时不进行校验。
This commit is contained in:
parent
88b3226b17
commit
7f4f5748f8
@ -237,7 +237,7 @@ public abstract class BasePropertyValidator<T, TProperty, TPropertyValidator ext
|
|||||||
*/
|
*/
|
||||||
public <E extends RuntimeException> TPropertyValidator equalTo(
|
public <E extends RuntimeException> TPropertyValidator equalTo(
|
||||||
Object that, Function<TProperty, E> e) {
|
Object that, Function<TProperty, E> e) {
|
||||||
withRule(value -> Objects.equals(value, that), e);
|
withRule(value -> value == null || value.equals(that), e);
|
||||||
return thisObject();
|
return thisObject();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -245,6 +245,63 @@ public abstract class BasePropertyValidator<T, TProperty, TPropertyValidator ext
|
|||||||
// #endregion - equalTo
|
// #endregion - equalTo
|
||||||
// ================================
|
// ================================
|
||||||
|
|
||||||
|
// ================================
|
||||||
|
// #region - notEqual
|
||||||
|
// ================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加一条校验属性的规则,校验属性是否等于给定值
|
||||||
|
*
|
||||||
|
* @param that 给定值
|
||||||
|
* @return 属性校验器
|
||||||
|
*/
|
||||||
|
public TPropertyValidator notEqual(Object that) {
|
||||||
|
return notEqual(that, value -> ValidationException
|
||||||
|
.withMessage("The input must not equal '%s'.", that));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加一条校验属性的规则,校验属性是否等于给定值
|
||||||
|
*
|
||||||
|
* @param that 给定值
|
||||||
|
* @param errMsg 错误信息
|
||||||
|
* @return 属性校验器
|
||||||
|
*/
|
||||||
|
public TPropertyValidator notEqual(Object that, String errMsg) {
|
||||||
|
return notEqual(that, convertToExceptionFunction(errMsg));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加一条校验属性的规则,校验属性是否等于给定值
|
||||||
|
*
|
||||||
|
* @param <E> 自定义异常类型
|
||||||
|
* @param that 给定值
|
||||||
|
* @param e 自定义异常
|
||||||
|
* @return 属性校验器
|
||||||
|
*/
|
||||||
|
public <E extends RuntimeException> TPropertyValidator notEqual(
|
||||||
|
Object that, Supplier<E> e) {
|
||||||
|
return notEqual(that, convertToExceptionFunction(e));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加一条校验属性的规则,校验属性是否等于给定值
|
||||||
|
*
|
||||||
|
* @param <E> 自定义异常类型
|
||||||
|
* @param that 给定值
|
||||||
|
* @param e 自定义异常
|
||||||
|
* @return 属性校验器
|
||||||
|
*/
|
||||||
|
public <E extends RuntimeException> TPropertyValidator notEqual(
|
||||||
|
Object that, Function<TProperty, E> e) {
|
||||||
|
withRule(value -> value == null || !value.equals(that), e);
|
||||||
|
return thisObject();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ================================
|
||||||
|
// #endregion - notEqual
|
||||||
|
// ================================
|
||||||
|
|
||||||
// ================================
|
// ================================
|
||||||
// #region - must
|
// #region - must
|
||||||
// ================================
|
// ================================
|
||||||
|
@ -231,8 +231,11 @@ public class ObjectPropertyValidatorTests {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
ExampleCommand command = new ExampleCommand();
|
ExampleCommand command = new ExampleCommand();
|
||||||
command.setStringProperty("Foo");
|
|
||||||
|
|
||||||
|
command.setStringProperty(null);
|
||||||
|
assertDoesNotThrow(() -> validator.validate(command));
|
||||||
|
|
||||||
|
command.setStringProperty("Foo");
|
||||||
assertDoesNotThrow(() -> validator.validate(command));
|
assertDoesNotThrow(() -> validator.validate(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -281,52 +284,83 @@ public class ObjectPropertyValidatorTests {
|
|||||||
assertEquals("The stringProperty should be equal to 'Foo', but is was 'Bar'.", specifiedException2.getMessage());
|
assertEquals("The stringProperty should be equal to 'Foo', but is was 'Bar'.", specifiedException2.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ================================
|
||||||
|
// #endregion - equalTo
|
||||||
|
// ================================
|
||||||
|
|
||||||
|
// ================================
|
||||||
|
// #region - notEqual
|
||||||
|
// ================================
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void equalTo_nullInput() {
|
void notEqual_validInput() {
|
||||||
|
IValidator<ExampleCommand> validator = new BaseValidator<ExampleCommand>() {
|
||||||
|
{
|
||||||
|
ruleForString(ExampleCommand::getStringProperty)
|
||||||
|
.notEqual("Foo")
|
||||||
|
.notEqual("Foo", "The stringProperty should not equal 'Foo'.")
|
||||||
|
.notEqual("Foo", () ->
|
||||||
|
ExampleException.withMessage("The stringProperty should not equal 'Foo'."))
|
||||||
|
.notEqual("Foo", str ->
|
||||||
|
ExampleException.withMessage("The stringProperty should not equal 'Foo', but is was '%s'.", str));
|
||||||
|
}
|
||||||
|
};
|
||||||
ExampleCommand command = new ExampleCommand();
|
ExampleCommand command = new ExampleCommand();
|
||||||
|
|
||||||
|
command.setStringProperty(null);
|
||||||
|
assertDoesNotThrow(() -> validator.validate(command));
|
||||||
|
|
||||||
|
command.setStringProperty("Bar");
|
||||||
|
assertDoesNotThrow(() -> validator.validate(command));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void notEqual_invalidInput() {
|
||||||
|
ExampleCommand command = new ExampleCommand();
|
||||||
|
command.setStringProperty("Foo");
|
||||||
|
|
||||||
IValidator<ExampleCommand> defaultRule = new BaseValidator<ExampleCommand>() {
|
IValidator<ExampleCommand> defaultRule = new BaseValidator<ExampleCommand>() {
|
||||||
{
|
{
|
||||||
ruleForString(ExampleCommand::getStringProperty).equalTo("Foo");
|
ruleForString(ExampleCommand::getStringProperty).notEqual("Foo");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
ValidationException eWithDefaultMessage = assertThrows(
|
ValidationException eWithDefaultMessage = assertThrows(
|
||||||
ValidationException.class, () -> defaultRule.validate(command));
|
ValidationException.class, () -> defaultRule.validate(command));
|
||||||
assertEquals("The input must be equal to 'Foo'.", eWithDefaultMessage.getMessage());
|
assertEquals("The input must not equal 'Foo'.", eWithDefaultMessage.getMessage());
|
||||||
|
|
||||||
IValidator<ExampleCommand> ruleWithMessage = new BaseValidator<ExampleCommand>() {
|
IValidator<ExampleCommand> ruleWithMessage = new BaseValidator<ExampleCommand>() {
|
||||||
{
|
{
|
||||||
ruleForString(ExampleCommand::getStringProperty).equalTo("Foo",
|
ruleForString(ExampleCommand::getStringProperty).notEqual("Foo",
|
||||||
"The stringProperty should be equal to 'Foo'.");
|
"The stringProperty should not equal 'Foo'.");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
ValidationException eWithSpecifiedMessage = assertThrows(
|
ValidationException eWithSpecifiedMessage = assertThrows(
|
||||||
ValidationException.class, () -> ruleWithMessage.validate(command));
|
ValidationException.class, () -> ruleWithMessage.validate(command));
|
||||||
assertEquals("The stringProperty should be equal to 'Foo'.", eWithSpecifiedMessage.getMessage());
|
assertEquals("The stringProperty should not equal 'Foo'.", eWithSpecifiedMessage.getMessage());
|
||||||
|
|
||||||
IValidator<ExampleCommand> ruleWithExceptionSupplier = new BaseValidator<ExampleCommand>() {
|
IValidator<ExampleCommand> ruleWithExceptionSupplier = new BaseValidator<ExampleCommand>() {
|
||||||
{
|
{
|
||||||
ruleForString(ExampleCommand::getStringProperty).equalTo("Foo",
|
ruleForString(ExampleCommand::getStringProperty).notEqual("Foo",
|
||||||
() -> ExampleException.withMessage("The stringProperty should be equal to 'Foo'."));
|
() -> ExampleException.withMessage("The stringProperty should not equal 'Foo'."));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
ExampleException specifiedException = assertThrows(
|
ExampleException specifiedException = assertThrows(
|
||||||
ExampleException.class, () -> ruleWithExceptionSupplier.validate(command));
|
ExampleException.class, () -> ruleWithExceptionSupplier.validate(command));
|
||||||
assertEquals("The stringProperty should be equal to 'Foo'.", specifiedException.getMessage());
|
assertEquals("The stringProperty should not equal 'Foo'.", specifiedException.getMessage());
|
||||||
|
|
||||||
IValidator<ExampleCommand> ruleWithExceptionFunction = new BaseValidator<ExampleCommand>() {
|
IValidator<ExampleCommand> ruleWithExceptionFunction = new BaseValidator<ExampleCommand>() {
|
||||||
{
|
{
|
||||||
ruleForString(ExampleCommand::getStringProperty).equalTo("Foo",
|
ruleForString(ExampleCommand::getStringProperty).notEqual("Foo",
|
||||||
str -> ExampleException.withMessage("The stringProperty should be equal to 'Foo', but is was '%s'.", str));
|
str -> ExampleException.withMessage("The stringProperty should not equal 'Foo', but is was '%s'.", str));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
ExampleException specifiedException2 = assertThrows(
|
ExampleException specifiedException2 = assertThrows(
|
||||||
ExampleException.class, () -> ruleWithExceptionFunction.validate(command));
|
ExampleException.class, () -> ruleWithExceptionFunction.validate(command));
|
||||||
assertEquals("The stringProperty should be equal to 'Foo', but is was 'null'.", specifiedException2.getMessage());
|
assertEquals("The stringProperty should not equal 'Foo', but is was 'Foo'.", specifiedException2.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
// ================================
|
// ================================
|
||||||
// #endregion - equalTo
|
// #endregion - notEqual
|
||||||
// ================================
|
// ================================
|
||||||
|
|
||||||
// ================================
|
// ================================
|
||||||
|
Loading…
x
Reference in New Issue
Block a user