diff --git a/src/main/java/com/mindee/parsing/generated/GeneratedObject.java b/src/main/java/com/mindee/parsing/generated/GeneratedObject.java index 79b33c46b..8165f46d3 100644 --- a/src/main/java/com/mindee/parsing/generated/GeneratedObject.java +++ b/src/main/java/com/mindee/parsing/generated/GeneratedObject.java @@ -32,8 +32,19 @@ public StringField asStringField() { * Represent the object as a standard {@link AmountField}. */ public AmountField asAmountField() { + Double value; + Object rawValue = this.get("value"); + if (rawValue instanceof Integer) { + value = ((Integer) rawValue).doubleValue(); + } + else if (rawValue instanceof Double) { + value = (Double) rawValue; + } + else { + throw new ClassCastException("Cannot cast " + rawValue + " to Double"); + } return new AmountField( - (Double) this.get("value"), + value, this.getConfidence(), this.getPolygon(), this.getPageId() diff --git a/src/test/java/com/mindee/product/generated/GeneratedV1Test.java b/src/test/java/com/mindee/product/generated/GeneratedV1Test.java index e1fb217af..e8f1c8067 100644 --- a/src/test/java/com/mindee/product/generated/GeneratedV1Test.java +++ b/src/test/java/com/mindee/product/generated/GeneratedV1Test.java @@ -243,4 +243,21 @@ else if (featureValue.isList()) { } } } + + @Test + void whenAmountDeserialized_mustCastToDouble() { + GeneratedObject intObject = new GeneratedObject(); + intObject.put("value", 5); + AmountField fieldFromInt = intObject.asAmountField(); + Assertions.assertEquals(5.0, fieldFromInt.getValue()); + + GeneratedObject doubleObject = new GeneratedObject(); + doubleObject.put("value", 5.0); + AmountField fieldFromDouble = doubleObject.asAmountField(); + Assertions.assertEquals(5.0, fieldFromDouble.getValue()); + + GeneratedObject badStringObject = new GeneratedObject(); + doubleObject.put("value", "I will fail miserably"); + Assertions.assertThrows(ClassCastException.class, badStringObject::asAmountField); + } }