diff --git a/jackson-modules/jackson-conversions/pom.xml b/jackson-modules/jackson-conversions/pom.xml
index 9218f209ac..9ab1fa9020 100644
--- a/jackson-modules/jackson-conversions/pom.xml
+++ b/jackson-modules/jackson-conversions/pom.xml
@@ -24,6 +24,11 @@
jackson-datatype-jsr310
${jackson.version}
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson.version}
+
diff --git a/jackson-modules/jackson-conversions/src/main/java/com/baeldung/jackson/map/Fruit.java b/jackson-modules/jackson-conversions/src/main/java/com/baeldung/jackson/map/Fruit.java
new file mode 100644
index 0000000000..49e45f2161
--- /dev/null
+++ b/jackson-modules/jackson-conversions/src/main/java/com/baeldung/jackson/map/Fruit.java
@@ -0,0 +1,21 @@
+package com.baeldung.jackson.map;
+
+import com.fasterxml.jackson.annotation.JsonKey;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+public class Fruit {
+ public String variety;
+
+ @JsonKey
+ public String name;
+
+ public Fruit(String variety, String name) {
+ this.variety = variety;
+ this.name = name;
+ }
+
+ @JsonValue
+ public String getFullName() {
+ return this.variety + " " + this.name;
+ }
+}
diff --git a/jackson-modules/jackson-conversions/src/test/java/com/baeldung/jackson/map/MapWithJsonKeyValueUnitTest.java b/jackson-modules/jackson-conversions/src/test/java/com/baeldung/jackson/map/MapWithJsonKeyValueUnitTest.java
new file mode 100644
index 0000000000..87c425fe96
--- /dev/null
+++ b/jackson-modules/jackson-conversions/src/test/java/com/baeldung/jackson/map/MapWithJsonKeyValueUnitTest.java
@@ -0,0 +1,48 @@
+package com.baeldung.jackson.map;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class MapWithJsonKeyValueUnitTest {
+ private static final Fruit FRUIT1 = new Fruit("Alphonso", "Mango");
+ private static final Fruit FRUIT2 = new Fruit("Black", "Grapes");
+ private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
+
+ @Test
+ public void givenObject_WhenSerialize_ThenUseJsonValueForSerialization() throws JsonProcessingException {
+ String serializedValueForFruit1 = OBJECT_MAPPER.writeValueAsString(FRUIT1);
+ Assertions.assertEquals("\"Alphonso Mango\"", serializedValueForFruit1);
+ String serializedValueForFruit2 = OBJECT_MAPPER.writeValueAsString(FRUIT2);
+ Assertions.assertEquals("\"Black Grapes\"", serializedValueForFruit2);
+ }
+
+ @Test
+ public void givenMapWithObjectKeys_WhenSerialize_ThenUseJsonKeyForSerialization() throws JsonProcessingException {
+ // Given
+ Map selectionByFruit = new HashMap<>();
+ selectionByFruit.put(FRUIT1, "Hagrid");
+ selectionByFruit.put(FRUIT2, "Hercules");
+ // When
+ String serializedValue = OBJECT_MAPPER.writeValueAsString(selectionByFruit);
+ // Then
+ Assertions.assertEquals("{\"Mango\":\"Hagrid\",\"Grapes\":\"Hercules\"}", serializedValue);
+ }
+
+ @Test
+ public void givenMapWithObjectValues_WhenSerialize_ThenUseJsonValueForSerialization() throws JsonProcessingException {
+ // Given
+ Map selectionByPerson = new HashMap<>();
+ selectionByPerson.put("Hagrid", FRUIT1);
+ selectionByPerson.put("Hercules", FRUIT2);
+ // When
+ String serializedValue = OBJECT_MAPPER.writeValueAsString(selectionByPerson);
+ // Then
+ Assertions.assertEquals("{\"Hagrid\":\"Alphonso Mango\",\"Hercules\":\"Black Grapes\"}", serializedValue);
+ }
+}