From 1ad8489a7157887cdc03f412f3b8f3f153e13614 Mon Sep 17 00:00:00 2001 From: David Semke Date: Thu, 16 Apr 2015 13:14:56 -0500 Subject: [PATCH] Add support for @Pattern annotations in String schemas --- .../ValidationSchemaFactoryWrapper.java | 1 + .../AnnotationConstraintResolver.java | 9 ++++++++ .../ValidationConstraintResolver.java | 1 + .../ValidationSchemaFactoryWrapperTest.java | 23 +++++++++++++++++++ 4 files changed, 34 insertions(+) diff --git a/src/main/java/com/fasterxml/jackson/module/jsonSchema/customProperties/ValidationSchemaFactoryWrapper.java b/src/main/java/com/fasterxml/jackson/module/jsonSchema/customProperties/ValidationSchemaFactoryWrapper.java index cc756f2c..cd761476 100644 --- a/src/main/java/com/fasterxml/jackson/module/jsonSchema/customProperties/ValidationSchemaFactoryWrapper.java +++ b/src/main/java/com/fasterxml/jackson/module/jsonSchema/customProperties/ValidationSchemaFactoryWrapper.java @@ -81,6 +81,7 @@ private JsonSchema addValidationConstraints(JsonSchema schema, BeanProperty prop StringSchema stringSchema = schema.asStringSchema(); stringSchema.setMaxLength(constraintResolver.getStringMaxLength(prop)); stringSchema.setMinLength(constraintResolver.getStringMinLength(prop)); + stringSchema.setPattern(constraintResolver.getStringPattern(prop)); } return schema; } diff --git a/src/main/java/com/fasterxml/jackson/module/jsonSchema/validation/AnnotationConstraintResolver.java b/src/main/java/com/fasterxml/jackson/module/jsonSchema/validation/AnnotationConstraintResolver.java index a41df48e..a69d4ca4 100644 --- a/src/main/java/com/fasterxml/jackson/module/jsonSchema/validation/AnnotationConstraintResolver.java +++ b/src/main/java/com/fasterxml/jackson/module/jsonSchema/validation/AnnotationConstraintResolver.java @@ -63,4 +63,13 @@ public Integer getStringMaxLength(BeanProperty prop) { public Integer getStringMinLength(BeanProperty prop) { return getMinSize(prop); } + + @Override + public String getStringPattern(final BeanProperty prop) { + Pattern patternAnnotation = prop.getAnnotation(Pattern.class); + if (patternAnnotation != null) { + return patternAnnotation.regexp(); + } + return null; + } } diff --git a/src/main/java/com/fasterxml/jackson/module/jsonSchema/validation/ValidationConstraintResolver.java b/src/main/java/com/fasterxml/jackson/module/jsonSchema/validation/ValidationConstraintResolver.java index 0ada0e7d..91d710e2 100644 --- a/src/main/java/com/fasterxml/jackson/module/jsonSchema/validation/ValidationConstraintResolver.java +++ b/src/main/java/com/fasterxml/jackson/module/jsonSchema/validation/ValidationConstraintResolver.java @@ -19,4 +19,5 @@ public interface ValidationConstraintResolver { Integer getStringMinLength(BeanProperty prop); + String getStringPattern(BeanProperty prop); } diff --git a/src/test/java/com/fasterxml/jackson/module/jsonSchema/ValidationSchemaFactoryWrapperTest.java b/src/test/java/com/fasterxml/jackson/module/jsonSchema/ValidationSchemaFactoryWrapperTest.java index f3cf381c..d6853fc9 100644 --- a/src/test/java/com/fasterxml/jackson/module/jsonSchema/ValidationSchemaFactoryWrapperTest.java +++ b/src/test/java/com/fasterxml/jackson/module/jsonSchema/ValidationSchemaFactoryWrapperTest.java @@ -87,6 +87,9 @@ public static class ValidationBean { @Size(min = 15, max = 16) private String stringWithMinAndMaxSize; + @Pattern(regexp = "[a-z]+") + private String stringWithPattern; + public List getListWithoutConstraints() { return listWithoutConstraints; } @@ -222,6 +225,14 @@ public String getStringWithMinAndMaxSize() { public void setStringWithMinAndMaxSize(String stringWithMinAndMaxSize) { this.stringWithMinAndMaxSize = stringWithMinAndMaxSize; } + + public String getStringWithPattern() { + return stringWithPattern; + } + + public void setStringWithPattern(final String stringWithPattern) { + this.stringWithPattern = stringWithPattern; + } } /* @@ -256,6 +267,11 @@ private Object[][] stringTestData() { {"stringWithMinAndMaxSize", 15, 16}}; } + private Object[][] stringPatternTestData() { + return new Object[][] {{"stringWithPattern", "[a-z]+"}, + {"stringWithoutConstraints", null}}; + } + /** * Test set validation constraints */ @@ -294,6 +310,13 @@ public void testAddingValidationConstraints() throws Exception { assertEquals(testCase[1], stringSchema.getMinLength()); assertEquals(testCase[2], stringSchema.getMaxLength()); } + for (Object[] testCase : stringPatternTestData()) { + JsonSchema propertySchema = properties.get(testCase[0]); + assertNotNull(propertySchema); + assertTrue(propertySchema.isStringSchema()); + StringSchema stringSchema = propertySchema.asStringSchema(); + assertEquals(testCase[1], stringSchema.getPattern()); + } } }