Deserialisation of Int to BigDecimal fails
jebbench opened this issue · 3 comments
jebbench commented
Attempting to deserialise an int as a BigDecimal fails with the following exception:
Caused by: com.arangodb.velocypack.exception.VPackValueTypeException: Expecting type STRING or DOUBLE
at com.arangodb.velocypack.VPackSlice.getAsBigDecimal(VPackSlice.java:293) ~[velocypack-2.3.1.jar:?]
at com.arangodb.jackson.dataformat.velocypack.internal.VPackParser.getDecimalValue(VPackParser.java:289) ~[jackson-dataformat-velocypack-0.1.5.jar:?]
at com.fasterxml.jackson.databind.deser.std.NumberDeserializers$BigDecimalDeserializer.deserialize(NumberDeserializers.java:948) ~[jackson-databind-2.11.0.jar:2.11.0]
at com.fasterxml.jackson.databind.deser.std.NumberDeserializers$BigDecimalDeserializer.deserialize(NumberDeserializers.java:927) ~[jackson-databind-2.11.0.jar:2.11.0]
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:542) ~[jackson-databind-2.11.0.jar:2.11.0]
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:535) ~[jackson-databind-2.11.0.jar:2.11.0]
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:419) ~[jackson-databind-2.11.0.jar:2.11.0]
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1310) ~[jackson-databind-2.11.0.jar:2.11.0]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:331) ~[jackson-databind-2.11.0.jar:2.11.0]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:164) ~[jackson-databind-2.11.0.jar:2.11.0]
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4482) ~[jackson-databind-2.11.0.jar:2.11.0]
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3504) ~[jackson-databind-2.11.0.jar:2.11.0]
at com.arangodb.VelocyJack.deserialize(VelocyJack.java:112) ~[jackson-dataformat-velocypack-0.1.5.jar:?]
... 18 more
This is caused by the getAsBigDecimal
method in VPackSlice.java
not parsing ints.
public BigDecimal getAsBigDecimal() {
if (isString()) {
return new BigDecimal(getAsString());
} else if (isDouble()) {
return BigDecimal.valueOf(getAsDouble());
} else {
throw new VPackValueTypeException(ValueType.STRING, ValueType.DOUBLE);
}
}
jebbench commented
I've the beginnings of a PR here: https://github.com/jebbench/java-velocypack/tree/ints-as-big-decimals
let me know if you think this is worth continuing with - in the meantime I'll change my types to doubles.
rashtao commented
@jebbench your fork looks good to me, please open a PR against https://github.com/arangodb/java-velocypack