From 27b3c746bf4c332a3171374eb6c479c53da6327d Mon Sep 17 00:00:00 2001 From: Georgie Date: Tue, 22 Sep 2015 23:28:58 -0700 Subject: [PATCH 1/3] NumberSchema#multipleOf --- .../module/jsonSchema/types/NumberSchema.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/fasterxml/jackson/module/jsonSchema/types/NumberSchema.java b/src/main/java/com/fasterxml/jackson/module/jsonSchema/types/NumberSchema.java index 8c572016..15397e27 100644 --- a/src/main/java/com/fasterxml/jackson/module/jsonSchema/types/NumberSchema.java +++ b/src/main/java/com/fasterxml/jackson/module/jsonSchema/types/NumberSchema.java @@ -29,11 +29,15 @@ public class NumberSchema extends ValueTypeSchema /**This attribute defines the maximum value of the instance property*/ @JsonProperty private Double maximum = null; - + /**This attribute defines the minimum value of the instance property*/ @JsonProperty private Double minimum = null; + /** The value of the instance needs to be a multiple of this attribute */ + @JsonProperty + private Double multipleOf = null; + @Override public NumberSchema asNumberSchema() { return this; } @@ -52,6 +56,10 @@ public Double getMaximum() { public Double getMinimum() { return minimum; } + + public Double getMultipleOf() { + return multipleOf; + } /* (non-Javadoc) * @see com.fasterxml.jackson.databind.jsonSchema.types.JsonSchema#getType() @@ -81,6 +89,10 @@ public void setMinimum(Double minimum) { this.minimum = minimum; } + public void setMultipleOf(Double multipleOf) { + this.multipleOf = multipleOf; + } + @Override public boolean equals(Object obj) { @@ -97,6 +109,5 @@ protected boolean _equals(NumberSchema that) equals(getMaximum(), that.getMaximum()) && equals(getMinimum(), that.getMinimum()) && super._equals(that); - } - + } } From 0b8c8317e1bd5b673ddd23ac0c61af58f062451f Mon Sep 17 00:00:00 2001 From: Georgie Date: Tue, 22 Sep 2015 23:40:11 -0700 Subject: [PATCH 2/3] Include multipleOf in equals --- .../fasterxml/jackson/module/jsonSchema/types/NumberSchema.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/fasterxml/jackson/module/jsonSchema/types/NumberSchema.java b/src/main/java/com/fasterxml/jackson/module/jsonSchema/types/NumberSchema.java index 15397e27..b42d35d3 100644 --- a/src/main/java/com/fasterxml/jackson/module/jsonSchema/types/NumberSchema.java +++ b/src/main/java/com/fasterxml/jackson/module/jsonSchema/types/NumberSchema.java @@ -108,6 +108,7 @@ protected boolean _equals(NumberSchema that) equals(getExclusiveMinimum(), that.getExclusiveMinimum()) && equals(getMaximum(), that.getMaximum()) && equals(getMinimum(), that.getMinimum()) && + equals(getMultipleOf(), that.getMultipleOf()) && super._equals(that); } } From f368aca5770a2df55d99bcefca0a1c5b5310a3b8 Mon Sep 17 00:00:00 2001 From: Georgie Date: Tue, 22 Sep 2015 21:05:18 -0700 Subject: [PATCH 3/3] Use BigDecimal instead of Double --- .../ValidationSchemaFactoryWrapper.java | 15 ++++++++++++-- .../module/jsonSchema/types/NumberSchema.java | 20 ++++++++++--------- .../ValidationSchemaFactoryWrapperTest.java | 17 ++++++++-------- 3 files changed, 33 insertions(+), 19 deletions(-) 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 cd761476..cda014a5 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 @@ -14,6 +14,8 @@ import com.fasterxml.jackson.module.jsonSchema.validation.AnnotationConstraintResolver; import com.fasterxml.jackson.module.jsonSchema.validation.ValidationConstraintResolver; +import java.math.BigDecimal; + /** * @author cponomaryov */ @@ -75,8 +77,10 @@ private JsonSchema addValidationConstraints(JsonSchema schema, BeanProperty prop arraySchema.setMinItems(constraintResolver.getArrayMinItems(prop)); } else if (schema.isNumberSchema()) { NumberSchema numberSchema = schema.asNumberSchema(); - numberSchema.setMaximum(constraintResolver.getNumberMaximum(prop)); - numberSchema.setMinimum(constraintResolver.getNumberMinimum(prop)); + Double max = constraintResolver.getNumberMaximum(prop); + numberSchema.setMaximum(maybeBigDecimal(max)); + Double min = constraintResolver.getNumberMinimum(prop); + numberSchema.setMinimum(maybeBigDecimal(min)); } else if (schema.isStringSchema()) { StringSchema stringSchema = schema.asStringSchema(); stringSchema.setMaxLength(constraintResolver.getStringMaxLength(prop)); @@ -86,4 +90,11 @@ private JsonSchema addValidationConstraints(JsonSchema schema, BeanProperty prop return schema; } + private BigDecimal maybeBigDecimal(Double value) { + if (value == null) + return null; + else + return new BigDecimal(value); + } + } diff --git a/src/main/java/com/fasterxml/jackson/module/jsonSchema/types/NumberSchema.java b/src/main/java/com/fasterxml/jackson/module/jsonSchema/types/NumberSchema.java index b42d35d3..3821dd8c 100644 --- a/src/main/java/com/fasterxml/jackson/module/jsonSchema/types/NumberSchema.java +++ b/src/main/java/com/fasterxml/jackson/module/jsonSchema/types/NumberSchema.java @@ -4,6 +4,8 @@ import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatTypes; import com.fasterxml.jackson.module.jsonSchema.JsonSchema; +import java.math.BigDecimal; + /** * This class represents a {@link JsonSchema} as a number type * @author jphelan @@ -28,15 +30,15 @@ public class NumberSchema extends ValueTypeSchema /**This attribute defines the maximum value of the instance property*/ @JsonProperty - private Double maximum = null; + private BigDecimal maximum = null; /**This attribute defines the minimum value of the instance property*/ @JsonProperty - private Double minimum = null; + private BigDecimal minimum = null; /** The value of the instance needs to be a multiple of this attribute */ @JsonProperty - private Double multipleOf = null; + private BigDecimal multipleOf = null; @Override public NumberSchema asNumberSchema() { return this; } @@ -49,15 +51,15 @@ public Boolean getExclusiveMinimum() { return exclusiveMinimum; } - public Double getMaximum() { + public BigDecimal getMaximum() { return maximum; } - public Double getMinimum() { + public BigDecimal getMinimum() { return minimum; } - public Double getMultipleOf() { + public BigDecimal getMultipleOf() { return multipleOf; } @@ -81,15 +83,15 @@ public void setExclusiveMinimum(Boolean exclusiveMinimum) { this.exclusiveMinimum = exclusiveMinimum; } - public void setMaximum(Double maximum) { + public void setMaximum(BigDecimal maximum) { this.maximum = maximum; } - public void setMinimum(Double minimum) { + public void setMinimum(BigDecimal minimum) { this.minimum = minimum; } - public void setMultipleOf(Double multipleOf) { + public void setMultipleOf(BigDecimal multipleOf) { this.multipleOf = multipleOf; } 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 d6853fc9..1f5eada8 100644 --- a/src/test/java/com/fasterxml/jackson/module/jsonSchema/ValidationSchemaFactoryWrapperTest.java +++ b/src/test/java/com/fasterxml/jackson/module/jsonSchema/ValidationSchemaFactoryWrapperTest.java @@ -7,6 +7,7 @@ import com.fasterxml.jackson.module.jsonSchema.types.StringSchema; import javax.validation.constraints.*; +import java.math.BigDecimal; import java.util.List; import java.util.Map; @@ -250,14 +251,14 @@ private Object[][] listTestData() { private Object[][] numberTestData() { return new Object[][] {{"numberWithoutConstraints", null, null}, - {"numberWithMin", 5d, null}, - {"numberWithDecimalMin", 5.5, null}, - {"numberWithMax", null, 6d}, - {"numberWithDecimalMax", null, 6.5}, - {"numberWithMinAndMax", 7d, 8d}, - {"numberWithMinAndDecimalMax", 9d, 9.5}, - {"numberWithDecimalMinAndMax", 10.5, 11d}, - {"numberWithDecimalMinAndDecimalMax", 11.5, 12.5}}; + {"numberWithMin", new BigDecimal(5d), null}, + {"numberWithDecimalMin", new BigDecimal(5.5), null}, + {"numberWithMax", null, new BigDecimal(6d)}, + {"numberWithDecimalMax", null, new BigDecimal(6.5)}, + {"numberWithMinAndMax", new BigDecimal(7d), new BigDecimal(8d)}, + {"numberWithMinAndDecimalMax", new BigDecimal(9d), new BigDecimal(9.5)}, + {"numberWithDecimalMinAndMax", new BigDecimal(10.5), new BigDecimal(11d)}, + {"numberWithDecimalMinAndDecimalMax", new BigDecimal(11.5), new BigDecimal(12.5)}}; } private Object[][] stringTestData() {