diff --git a/data-prepper-api/src/main/java/org/opensearch/dataprepper/model/event/DataType.java b/data-prepper-api/src/main/java/org/opensearch/dataprepper/model/event/DataType.java
index 44852a36ab..c6e899a6f4 100644
--- a/data-prepper-api/src/main/java/org/opensearch/dataprepper/model/event/DataType.java
+++ b/data-prepper-api/src/main/java/org/opensearch/dataprepper/model/event/DataType.java
@@ -7,6 +7,7 @@
import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Map;
@@ -49,6 +50,13 @@ public enum DataType {
*/
DOUBLE("double"),
+ /**
+ * Type of BigDecimal. No precision loss possible type. Compatible with the Java BigDecimal primitive data type.
+ *
+ * @since 2.8
+ */
+ BIG_DECIMAL("big_decimal"),
+
/**
* Type of map. Compatible with the Java map primitive data type.
*
@@ -96,20 +104,22 @@ public static boolean isSameType(final Object object, final String option) {
if (type == null)
throw new IllegalArgumentException("Unknown DataType");
switch (type) {
- case MAP:
- return (object instanceof Map);
- case ARRAY:
- return (object instanceof ArrayList || object.getClass().isArray());
- case DOUBLE:
- return (object instanceof Double);
- case BOOLEAN:
- return (object instanceof Boolean);
- case INTEGER:
- return (object instanceof Integer);
- case LONG:
- return (object instanceof Long);
- default: // STRING
- return (object instanceof String);
+ case MAP:
+ return (object instanceof Map);
+ case ARRAY:
+ return (object instanceof ArrayList || object.getClass().isArray());
+ case DOUBLE:
+ return (object instanceof Double);
+ case BOOLEAN:
+ return (object instanceof Boolean);
+ case INTEGER:
+ return (object instanceof Integer);
+ case LONG:
+ return (object instanceof Long);
+ case BIG_DECIMAL:
+ return (object instanceof BigDecimal);
+ default: // STRING
+ return (object instanceof String);
}
}
}
diff --git a/data-prepper-api/src/main/java/org/opensearch/dataprepper/model/event/JacksonEvent.java b/data-prepper-api/src/main/java/org/opensearch/dataprepper/model/event/JacksonEvent.java
index e135f7e9db..9ef34bb82c 100644
--- a/data-prepper-api/src/main/java/org/opensearch/dataprepper/model/event/JacksonEvent.java
+++ b/data-prepper-api/src/main/java/org/opensearch/dataprepper/model/event/JacksonEvent.java
@@ -11,6 +11,8 @@
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader;
+import com.fasterxml.jackson.databind.cfg.JsonNodeFeature;
+import com.fasterxml.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.fasterxml.jackson.databind.type.TypeFactory;
@@ -61,11 +63,14 @@ public class JacksonEvent implements Event {
private static final String SEPARATOR = "/";
- private static final ObjectMapper mapper = new ObjectMapper()
+ private static final ObjectMapper mapper = JsonMapper.builder()
+ .disable(JsonNodeFeature.STRIP_TRAILING_BIGDECIMAL_ZEROES)
+ .build()
.registerModule(new JavaTimeModule())
.registerModule(new Jdk8Module()); // required for using Optional with Jackson. Ref: https://github.com/FasterXML/jackson-modules-java8
- private static final TypeReference