Skip to content

Commit fd6d8e8

Browse files
committed
feat(validate): Add ValidationError, ValidationException, Validator interface
1 parent 456196b commit fd6d8e8

4 files changed

Lines changed: 44 additions & 0 deletions

File tree

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.retailsvc.http;
2+
3+
import com.retailsvc.http.validate.ValidationError;
4+
5+
public final class ValidationException extends RuntimeException {
6+
private final ValidationError error;
7+
8+
public ValidationException(ValidationError error) {
9+
super(error.pointer() + " [" + error.keyword() + "] " + error.message());
10+
this.error = error;
11+
}
12+
13+
public ValidationError error() {
14+
return error;
15+
}
16+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package com.retailsvc.http.validate;
2+
3+
public record ValidationError(
4+
String pointer, String keyword, String message, Object rejectedValue) {}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.retailsvc.http.validate;
2+
3+
import com.retailsvc.http.spec.schema.Schema;
4+
5+
public interface Validator {
6+
/** Throws ValidationException on first failure. */
7+
void validate(Object value, Schema schema, String pointer);
8+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.retailsvc.http;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import com.retailsvc.http.validate.ValidationError;
6+
import org.junit.jupiter.api.Test;
7+
8+
class ValidationExceptionTest {
9+
@Test
10+
void carriesError() {
11+
ValidationError e = new ValidationError("/x", "type", "expected string", null);
12+
ValidationException ex = new ValidationException(e);
13+
assertThat(ex.error()).isSameAs(e);
14+
assertThat(ex.getMessage()).contains("/x").contains("type").contains("expected string");
15+
}
16+
}

0 commit comments

Comments
 (0)