Skip to content

Commit 129565e

Browse files
committed
Merge pull request #69 from dsemke/master
Add support for @pattern annotations in String schemas
2 parents a7678e7 + 1ad8489 commit 129565e

File tree

4 files changed

+34
-0
lines changed

4 files changed

+34
-0
lines changed

Diff for: src/main/java/com/fasterxml/jackson/module/jsonSchema/customProperties/ValidationSchemaFactoryWrapper.java

+1
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ private JsonSchema addValidationConstraints(JsonSchema schema, BeanProperty prop
8181
StringSchema stringSchema = schema.asStringSchema();
8282
stringSchema.setMaxLength(constraintResolver.getStringMaxLength(prop));
8383
stringSchema.setMinLength(constraintResolver.getStringMinLength(prop));
84+
stringSchema.setPattern(constraintResolver.getStringPattern(prop));
8485
}
8586
return schema;
8687
}

Diff for: src/main/java/com/fasterxml/jackson/module/jsonSchema/validation/AnnotationConstraintResolver.java

+9
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,13 @@ public Integer getStringMaxLength(BeanProperty prop) {
6363
public Integer getStringMinLength(BeanProperty prop) {
6464
return getMinSize(prop);
6565
}
66+
67+
@Override
68+
public String getStringPattern(final BeanProperty prop) {
69+
Pattern patternAnnotation = prop.getAnnotation(Pattern.class);
70+
if (patternAnnotation != null) {
71+
return patternAnnotation.regexp();
72+
}
73+
return null;
74+
}
6675
}

Diff for: src/main/java/com/fasterxml/jackson/module/jsonSchema/validation/ValidationConstraintResolver.java

+1
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,5 @@ public interface ValidationConstraintResolver {
1919

2020
Integer getStringMinLength(BeanProperty prop);
2121

22+
String getStringPattern(BeanProperty prop);
2223
}

Diff for: src/test/java/com/fasterxml/jackson/module/jsonSchema/ValidationSchemaFactoryWrapperTest.java

+23
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,9 @@ public static class ValidationBean {
8787
@Size(min = 15, max = 16)
8888
private String stringWithMinAndMaxSize;
8989

90+
@Pattern(regexp = "[a-z]+")
91+
private String stringWithPattern;
92+
9093
public List<String> getListWithoutConstraints() {
9194
return listWithoutConstraints;
9295
}
@@ -222,6 +225,14 @@ public String getStringWithMinAndMaxSize() {
222225
public void setStringWithMinAndMaxSize(String stringWithMinAndMaxSize) {
223226
this.stringWithMinAndMaxSize = stringWithMinAndMaxSize;
224227
}
228+
229+
public String getStringWithPattern() {
230+
return stringWithPattern;
231+
}
232+
233+
public void setStringWithPattern(final String stringWithPattern) {
234+
this.stringWithPattern = stringWithPattern;
235+
}
225236
}
226237

227238
/*
@@ -256,6 +267,11 @@ private Object[][] stringTestData() {
256267
{"stringWithMinAndMaxSize", 15, 16}};
257268
}
258269

270+
private Object[][] stringPatternTestData() {
271+
return new Object[][] {{"stringWithPattern", "[a-z]+"},
272+
{"stringWithoutConstraints", null}};
273+
}
274+
259275
/**
260276
* Test set validation constraints
261277
*/
@@ -294,6 +310,13 @@ public void testAddingValidationConstraints() throws Exception {
294310
assertEquals(testCase[1], stringSchema.getMinLength());
295311
assertEquals(testCase[2], stringSchema.getMaxLength());
296312
}
313+
for (Object[] testCase : stringPatternTestData()) {
314+
JsonSchema propertySchema = properties.get(testCase[0]);
315+
assertNotNull(propertySchema);
316+
assertTrue(propertySchema.isStringSchema());
317+
StringSchema stringSchema = propertySchema.asStringSchema();
318+
assertEquals(testCase[1], stringSchema.getPattern());
319+
}
297320
}
298321

299322
}

0 commit comments

Comments
 (0)