diff --git a/approvaltests-tests/pom.xml b/approvaltests-tests/pom.xml
index 7effb4d5..2cc822a1 100644
--- a/approvaltests-tests/pom.xml
+++ b/approvaltests-tests/pom.xml
@@ -15,6 +15,18 @@
2.2.21
+
+
+
+ tools.jackson
+ jackson-bom
+ 3.0.2
+ import
+ pom
+
+
+
+
jakarta.servlet
@@ -126,6 +138,10 @@
jackson-databind
2.20.1
+
+ tools.jackson.core
+ jackson-databind
+
org.apache.camel
camel-xstream
diff --git a/approvaltests-tests/src/test/java/org/approvaltests/JsonJackson3ApprovalsTest.java b/approvaltests-tests/src/test/java/org/approvaltests/JsonJackson3ApprovalsTest.java
new file mode 100644
index 00000000..47aa1fed
--- /dev/null
+++ b/approvaltests-tests/src/test/java/org/approvaltests/JsonJackson3ApprovalsTest.java
@@ -0,0 +1,54 @@
+package org.approvaltests;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import org.junit.jupiter.api.Test;
+
+class JsonJackson3ApprovalsTest
+{
+ @Test
+ void testObjectMapperOverride()
+ {
+ MyClass o = new MyClass();
+ JsonJackson3Approvals.verifyAsJson(o,
+ jm -> jm.changeDefaultPropertyInclusion(incl -> incl.withValueInclusion(JsonInclude.Include.NON_NULL)));
+ }
+
+ @Test
+ void testDuplicateFields()
+ {
+ JsonJackson3Approvals.verifyAsJson(new MyOtherClass());
+ }
+ private static class MyClass
+ {
+ @JsonIgnore
+ private String name = "MyClass";
+ public String lastName = "MyClass";
+ public String middleName = null;
+ public String getName()
+ {
+ return name;
+ }
+
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+ }
+ private static class MyOtherClass extends MyClass
+ {
+ @JsonIgnore
+ private String name = "MyOtherClass";
+ @Override
+ public String getName()
+ {
+ return name;
+ }
+
+ @Override
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+ }
+}
diff --git a/approvaltests-tests/src/test/java/org/approvaltests/JsonJackson3ApprovalsTest.testDuplicateFields.approved.json b/approvaltests-tests/src/test/java/org/approvaltests/JsonJackson3ApprovalsTest.testDuplicateFields.approved.json
new file mode 100644
index 00000000..374a4247
--- /dev/null
+++ b/approvaltests-tests/src/test/java/org/approvaltests/JsonJackson3ApprovalsTest.testDuplicateFields.approved.json
@@ -0,0 +1,4 @@
+{
+ "lastName" : "MyClass",
+ "middleName" : null
+}
diff --git a/approvaltests-tests/src/test/java/org/approvaltests/JsonJackson3ApprovalsTest.testObjectMapperOverride.approved.json b/approvaltests-tests/src/test/java/org/approvaltests/JsonJackson3ApprovalsTest.testObjectMapperOverride.approved.json
new file mode 100644
index 00000000..81d7f83c
--- /dev/null
+++ b/approvaltests-tests/src/test/java/org/approvaltests/JsonJackson3ApprovalsTest.testObjectMapperOverride.approved.json
@@ -0,0 +1,3 @@
+{
+ "lastName" : "MyClass"
+}
diff --git a/approvaltests/pom.xml b/approvaltests/pom.xml
index 468dc4bc..c9d2ef08 100644
--- a/approvaltests/pom.xml
+++ b/approvaltests/pom.xml
@@ -37,6 +37,18 @@
https://github.com/approvals/ApprovalTests.Java
+
+
+
+ tools.jackson
+ jackson-bom
+ 3.0.2
+ import
+ pom
+
+
+
+
com.approvaltests
@@ -80,6 +92,11 @@
2.20.1
true
+
+ tools.jackson.core
+ jackson-databind
+ true
+
commons-net
commons-net
diff --git a/approvaltests/src/main/java/org/approvaltests/JsonJackson3Approvals.java b/approvaltests/src/main/java/org/approvaltests/JsonJackson3Approvals.java
new file mode 100644
index 00000000..fb4740a1
--- /dev/null
+++ b/approvaltests/src/main/java/org/approvaltests/JsonJackson3Approvals.java
@@ -0,0 +1,54 @@
+package org.approvaltests;
+
+import com.spun.util.ObjectUtils;
+import org.approvaltests.core.Options;
+import org.lambda.functions.Function1;
+import tools.jackson.core.JacksonException;
+import tools.jackson.databind.ObjectMapper;
+import tools.jackson.databind.json.JsonMapper;
+
+public class JsonJackson3Approvals
+{
+ private JsonJackson3Approvals()
+ {
+ }
+
+ public static void verifyAsJson(Object o)
+ {
+ verifyAsJson(o, new Options());
+ }
+
+ public static void verifyAsJson(Object o, Options options)
+ {
+ verifyAsJson(o, a -> a, options);
+ }
+
+ public static void verifyAsJson(Object o, Function1 objectMapperBuilder)
+ {
+ verifyAsJson(o, objectMapperBuilder, new Options());
+ }
+
+ public static void verifyAsJson(Object o, Function1 objectMapperBuilder,
+ Options options)
+ {
+ Approvals.verify(asJson(o, objectMapperBuilder), options.forFile().withExtension(".json"));
+ }
+
+ public static String asJson(Object o)
+ {
+ return asJson(o, a -> a);
+ }
+
+ public static String asJson(Object o, Function1 objectMapperBuilder)
+ {
+ try
+ {
+ ObjectMapper objectMapper = objectMapperBuilder.call(JsonMapper.builder()).build();
+ return objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(o);
+ }
+ catch (JacksonException e)
+ {
+ throw ObjectUtils.throwAsError(e);
+ }
+ }
+}