Skip to content

Commit 76142da

Browse files
authored
Extensible validator (#101)
Make RequestValidator <<extending-request-validator, extensible>> by introducing AbstractRequestValidator base class
1 parent cdc1fcd commit 76142da

File tree

8 files changed

+567
-419
lines changed

8 files changed

+567
-419
lines changed

belgif-rest-problem-validator/src/main/java/io/github/belgif/rest/problem/validation/AbstractRequestValidator.java

Lines changed: 466 additions & 0 deletions
Large diffs are not rendered by default.

belgif-rest-problem-validator/src/main/java/io/github/belgif/rest/problem/validation/RequestValidator.java

Lines changed: 26 additions & 419 deletions
Large diffs are not rendered by default.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package io.github.belgif.rest.problem.validation;
2+
3+
public abstract class AbstractRequestValidatorExtensionA<SELF extends AbstractRequestValidatorExtensionA<SELF>>
4+
extends AbstractRequestValidator<SELF> {
5+
6+
public SELF a() {
7+
return getThis();
8+
}
9+
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package io.github.belgif.rest.problem.validation;
2+
3+
public abstract class AbstractRequestValidatorExtensionB<SELF extends AbstractRequestValidatorExtensionB<SELF>>
4+
extends AbstractRequestValidatorExtensionA<SELF> {
5+
6+
public SELF b() {
7+
return getThis();
8+
}
9+
10+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package io.github.belgif.rest.problem.validation;
2+
3+
public final class RequestValidatorExtensionA extends AbstractRequestValidatorExtensionA<RequestValidatorExtensionA> {
4+
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package io.github.belgif.rest.problem.validation;
2+
3+
public final class RequestValidatorExtensionB extends AbstractRequestValidatorExtensionB<RequestValidatorExtensionB> {
4+
5+
}

belgif-rest-problem-validator/src/test/java/io/github/belgif/rest/problem/validation/RequestValidatorTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,20 @@ void chainingInvalid() {
468468
InputValidationIssues.invalidEnterpriseNumber(BODY, "enterpriseNumber", "2111111112"));
469469
}
470470

471+
@Test
472+
void extension() {
473+
new RequestValidatorExtensionB()
474+
.require(Input.body("test", "value"))
475+
.b()
476+
.a()
477+
.validate();
478+
new RequestValidatorExtensionB()
479+
.a()
480+
.b()
481+
.require(Input.body("test", "value"))
482+
.validate();
483+
}
484+
471485
private void assertValid(RequestValidator validator) {
472486
assertThatNoException().isThrownBy(validator::validate);
473487
}

src/main/asciidoc/index.adoc

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ The library consists of these modules:
3131

3232
=== Version 0.7
3333

34+
*belgif-rest-problem-validator:*
35+
36+
* Make RequestValidator <<extending-request-validator, extensible>> by introducing AbstractRequestValidator base class
37+
3438
*belgif-rest-problem-spring:*
3539

3640
* Extract ProblemWebClientCustomizer to belgif-rest-problem-spring-boot-2 and belgif-rest-problem-spring-boot-3 to fix NoSuchMethodError compatibility issue
@@ -281,6 +285,33 @@ include::../../../belgif-rest-problem-validator/src/test/java/adoc/CodeSamples.j
281285
----
282286
====
283287

288+
[discrete]
289+
[[extending-request-validator]]
290+
=== Extending the RequestValidator
291+
292+
You may have a need to extend the RequestValidator with custom organization- or domain-specific validations. +
293+
This is possible by extending the AbstractRequestValidator base class.
294+
295+
If in turn, you want your own validator implementation to be extensible as well, you can propagate the extensible fluent builder pattern as follows:
296+
297+
[source,java]
298+
.Extensible request validator
299+
----
300+
public abstract class AbstractMyRequestValidator<SELF extends AbstractMyRequestValidator<SELF>>
301+
extends AbstractRequestValidator<SELF> {
302+
303+
public SELF something(Input<String> input) {
304+
addValidator(new SomethingValidator(input));
305+
return getThis();
306+
}
307+
308+
}
309+
310+
public final class MyRequestValidator extends AbstractMyRequestValidator<MyRequestValidator> {
311+
312+
}
313+
----
314+
284315
[[belgif-rest-problem-java-ee]]
285316
== belgif-rest-problem-java-ee
286317

0 commit comments

Comments
 (0)